C#网络编程简单实现通信小例子.docx

上传人:b****7 文档编号:10819562 上传时间:2023-02-23 格式:DOCX 页数:17 大小:44.18KB
下载 相关 举报
C#网络编程简单实现通信小例子.docx_第1页
第1页 / 共17页
C#网络编程简单实现通信小例子.docx_第2页
第2页 / 共17页
C#网络编程简单实现通信小例子.docx_第3页
第3页 / 共17页
C#网络编程简单实现通信小例子.docx_第4页
第4页 / 共17页
C#网络编程简单实现通信小例子.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C#网络编程简单实现通信小例子.docx

《C#网络编程简单实现通信小例子.docx》由会员分享,可在线阅读,更多相关《C#网络编程简单实现通信小例子.docx(17页珍藏版)》请在冰豆网上搜索。

C#网络编程简单实现通信小例子.docx

C#网络编程简单实现通信小例子

1、主界面                                                           

2、源程序                                                          

Send

publicpartialclassformUdpSend:

Form

{

//声明一个UdpClient对象

UdpClientudpClient;

publicformUdpSend()

{

InitializeComponent();

//实例化UdpClient对象

udpClient=newUdpClient();

}

privatevoidbtnSend_Click(objectsender,EventArgse)

{

//获取发送信息

stringmessage=this.txtMessage.Text;

//获取发送数据

byte[]data=System.Text.Encoding.UTF8.GetBytes(message);

udpClient.Connect(IPAddress.Parse(this.txtIP.Text),12345);

udpClient.Send(data,data.Length);

this.txtMessage.Text="";

}

}

Receive

publicpartialclassformUdpReceive:

Form

{

UdpClientudpClient;

Threadthread;

publicformUdpReceive()

{

InitializeComponent();

//不捕获对错误线程的调用

CheckForIllegalCrossThreadCalls=false;

udpClient=newUdpClient(12345);

}

//设置监听

publicvoidListen()

{

IPEndPointiep=null;

while(true)

{

stringdata=System.Text.Encoding.UTF8.GetString(udpClient.Receive(refiep));

this.lbReceive.Items.Add(data);

}

}

privatevoidbtnReceive_Click(objectsender,EventArgse)

{

thread=newThread(newThreadStart(Listen));

thread.IsBackground=true;

thread.Start();

}

privatevoidformUdpReceive_Load(objectsender,EventArgse)

{

}

}

1、主界面                                                         

2、源代码                                                        

Client

publicpartialclassFormClient:

Form

{

//声明一个Socket

publicSocketnewClient;

//判断是否连接成功

publicboolisConnected;

//定义一个线程

publicThreadmyThread;

//定义一个委托

publicdelegatevoidMyInvoke(stringstr);

publicFormClient()

{

InitializeComponent();

}

privatevoidConnection()

{

//IPAddressip=null;

//intport=888;

byte[]data=newbyte[1024];

//创建一个新的Socket

newClient=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

//获取IP地址

#regionGetIP

//if(txtIP.Text==string.Empty)

//{

//MessageBox.Show("远程IP不能为空");

//}

//else

//{

//stringpattrn=@"((?

:

(?

:

25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?

\d)))\.){3}(?

:

25[0-5]|2[0-4]\d|((1\d{2})|([1-9]?

\d))))";

//if(System.Text.RegularExpressions.Regex.IsMatch(txtIP.Text.Trim(),pattrn))

//{

//ip=IPAddress.Parse(txtIP.Text.Trim());

//}

//else

//{

//MessageBox.Show("IP地址格式不正确!

");

//}

//}

#endregion

//获取端口号

#regionGetPort

//if(System.Text.RegularExpressions.Regex.IsMatch(@"^[-]?

\d+[.]?

\d*$",txtPort.Text.Trim()))

//{

//port=Convert.ToInt32(txtPort.Text.Trim());

//}

//else

//{

//MessageBox.Show("端口号格式不正确");

//}

#endregion

//封装网络端点

IPEndPointie=newIPEndPoint(IPAddress.Parse(txtIP.Text.Trim()),Convert.ToInt32(txtPort.Text.Trim()));

#regionConnection

try

{

//建立与远程主机之间的连接

newClient.Connect(ie);

//设置连接服务器控件的属性

//btnConnection.Enabled=false;

//设置连接状况

btnConnection.Text="停止连接";

//isConnected=true;

}

catch(SocketExceptionex)

{

MessageBox.Show("连接服务器失败"+ex.Message);

return;

}

#endregion

//启动当前线程用于接收消息

ThreadStartmyThreadDelegate=newThreadStart(ReceiveMessage);

myThread=newThread(myThreadDelegate);

myThread.Start();

}

///

///接收消息

///

publicvoidReceiveMessage()

{

while(true)

{

//定义字节数组大小

byte[]data=newbyte[1024];

//获取数组长度

intrecv=newClient.Receive(data);

//接收数据

stringstrData=Encoding.UTF8.GetString(data,0,recv);

//显示信息

ShowMessage(newClient.RemoteEndPoint.ToString()+":

"+strData+"\r\n");

}

}

///

///显示消息

///

///接收的消息,可能来自Client/也可能来自Server

publicvoidShowMessage(stringmsg)

{

//如果是在创建该控件以外的线程调用该控件

if(lbMessage.InvokeRequired)

{

MyInvokemyInvoke=newMyInvoke(ShowMessage);

//lbMessage.Invoke(myInvoke,newobject[]{msg});

lbMessage.Invoke(myInvoke,newobject[]{"远程主机:

"+msg});

}

else

{

lbMessage.Items.Add(msg);

}

}

privatevoidbtnSend_Click(objectsender,EventArgse)

{

if(txtSendMessage.Text==null)

{

txtSendMessage.Text="发送消息不能为空";

//停留1秒消失

}

else

{

//获取发送数据长度

intmyMessLength=txtSendMessage.Text.Length;

//将数据转换为字节数组

byte[]data=newbyte[myMessLength];

data=Encoding.UTF8.GetBytes(txtSendMessage.Text);

//发送数据

inti=newClient.Send(data);

//将数据显示在Client

ShowMessage("我说:

"+txtSendMessage.Text+"\r\n");

}

}

privatevoidbtnConnection_Click(objectsender,EventArgse)

{

if(btnConnection.Text=="连接服务")

{

Connection();

}

else

{

newClient.Close();

}

}

privatevoidFormClient_Load(objectsender,EventArgse)

{

}

}

Server

 

publicpartialclassForm1:

Form

{

publicForm1()

{

InitializeComponent();

}

publicThreadmyThread;//声明一个线程实例

publicSocketnewSocket;//声明一个Socket实例

publicSocketserverSocket;//声明服务端Socket实例

publicSocketclientSocket;//声明客户端Socket

publicdelegatevoidMyInvoke(stringstr);//声明一个委托

publicIPEndPointlocalEP;//声明本地网络端点

publicEndPointremote;//声明网络地址

publicintlocalPort;//声明本地端口号

publicBooleanisListening;//声明服务端是否监听

publicHashtable_sessionTable;//用于记录用户信息

publicboolbtnState=true;

//设置服务端监听的端口号属性

publicintSetPort

{

get{returnlocalPort;}

set{localPort=value;}

}

//设置监听

publicvoidListening()

{

SetPort=int.Parse(txtPort.Text.Trim());//设置端口号

newSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);//初始化Socket实例

newSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true);//允许Socket被绑定在已使用的地址上

localEP=newIPEndPoint(IPAddress.Any,SetPort);//初始化网络端点信息

try

{

_sessionTable=newHashtable(50);

newSocket.Bind(localEP);//绑定端口

newSocket.Listen(10);//开始监听

newSocket.BeginAccept(newAsyncCallback(OnConnectRequest),newSocket);//开始异步接受连接

}

catch(Exceptionex)

{

ShowMessage(ex.ToString());

}

}

privatevoidbtnStartServer_Click(objectsender,EventArgse)

{

ThreadStartmyThreadDelegate=newThreadStart(Listening);//新建一个线程用于委托

myThread=newThread(myThreadDelegate);

if(btnState)

{

myThread.Start();

stateBar.Text="服务已经启动,等待客户端连接";

btnState=false;

btnStartServer.Text="停止服务";

}

else

{

myThread.Interrupt();

myThread.Abort();

btnState=true;

btnStartServer.Text="开始服务";

stateBar.Text="服务已停止";

}

}

//显示信息

publicvoidShowMessage(stringmsg)

{

if(rtbMessage.InvokeRequired)

{

MyInvokemyInvoke=newMyInvoke(ShowMessage);

rtbMessage.Invoke(myInvoke,newobject[]{msg});

}

else

{

rtbMessage.AppendText(msg);

}

}

publicvoidOnConnectRequest(IAsyncResultar)

{

serverSocket=(Socket)ar.AsyncState;

clientSocket=serverSocket.EndAccept(ar);//异步接收连接

stringwelcomeStr="欢迎登陆到服务器";

byte[]data=System.Text.Encoding.UTF8.GetBytes(welcomeStr);

remote=clientSocket.RemoteEndPoint;//获取远程终点信息

ShowMessage(remote.ToString()+"连接成功"+DateTime.Now.ToString()+"\r\n");

clientSocket.Send(data,data.Length,0);

UserListOperate(clientSocket.RemoteEndPoint.ToString());

_sessionTable.Add(clientSocket.RemoteEndPoint,null);//将连接成功的客户端实例添加到哈希表中

serverSocket.BeginAccept(newAsyncCallback(OnConnectRequest),serverSocket);//等待新的客户端连接

//接收数据

ReceiveMessage();

}

//接收数据

publicvoidReceiveMessage()

{

while(true)

{

byte[]data=newbyte[1024];

intrecv=clientSocket.Receive(data);

stringmessage=Encoding.UTF8.GetString(data,0,recv);

ShowMessage(clientSocket.RemoteEndPoint.ToString()+":

"+message+"\r\n");

}

}

//添加用户列表

publicvoidUserListOperate(stringmsg)

{

//在线程里以安全的方式调用控件

if(lbUserList.InvokeRequired)

{

MyInvokemyInvoke=newMyInvoke(UserListOperate);

lblUserList.Invoke(myInvoke,newobject[]{msg});

}

else

{

lbUserList.Items.Add(msg);

}

}

//删除用户列表

publicvoidUserListOperateRemove(stringmsg)

{

if(lbUserList.InvokeRequired)

{

MyInvokemyInvoke=newMyInvoke(UserListOperateRemove);

lbUserList.Invoke(myInvoke,newobject[]{msg});

}

else

{

lbUserList.Items.Remove(msg);

}

}

//发送广播

publicvoidBroadCast()

{

stringstrMessage=txtMessage.Text;

Byte[]data=Encoding.UTF8.GetBytes(strMessage);

foreach(DictionaryEntryitemin_sessionTable)

{

EndPointtemp=(EndPoint)item.Key;

clientSocket.SendTo(data,temp);

ShowMessage("我:

"+strMessage+"\r\n");

}

txtMessage.Text="";

}

privatevoidForm1_Load(objectsender,EventArgse)

{

//获取本机IP

IPAddress[]ip=Dns.GetHostByName(Dns.GetHostName()).AddressList;

lblIP.Text+=ip[0].ToString();

}

privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse)

{

//窗体关闭时判断线程是否为空

if(myThread!

=null)

{

myThread.Abort();

}

thrownewException();

}

privatevoidbtnSend_Click(objectsender,EventArgse)

{

BroadCast();

}

}

如有不当之处,烦请指教。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1