C#中Socket通信用法实例详解
本文实例讲述了C#中Socket通信用法。分享给大家供大家参考。具体如下:
一、UDP方式:
服务器端代码:
staticvoidMain(string[]args) { intrecv; byte[]data=newbyte[1024]; IPEndPointipep=newIPEndPoint(IPAddress.Any,9050);//定义一网络端点 Socketnewsock=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);//定义一个Socket newsock.Bind(ipep);//Socket与本地的一个终结点相关联 Console.WriteLine("Waitingforaclient.."); IPEndPointsender=newIPEndPoint(IPAddress.Any,0);//定义要发送的计算机的地址 EndPointRemote=(EndPoint)(sender);// recv=newsock.ReceiveFrom(data,refRemote);//接受数据 Console.WriteLine("Messagereceivedfrom{0}:",Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data,0,recv)); stringwelcome="Welcometomytestserver!"; data=Encoding.ASCII.GetBytes(welcome); newsock.SendTo(data,data.Length,SocketFlags.None,Remote); while(true) { data=newbyte[1024]; recv=newsock.ReceiveFrom(data,refRemote); Console.WriteLine(Encoding.ASCII.GetString(data,0,recv)); newsock.SendTo(data,recv,SocketFlags.None,Remote); } }
客户端代码:
voidMainInfo() { byte[]data=newbyte[1024];//定义一个数组用来做数据的缓冲区 stringinput,stringData; IPEndPointipep=newIPEndPoint(IPAddress.Parse("192.168.1.21"),9050); Socketserver=newSocket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); stringwelcome="Hello,areyouthere?"; data=Encoding.ASCII.GetBytes(welcome); server.SendTo(data,data.Length,SocketFlags.None,ipep);//将数据发送到指定的终结点 IPEndPointsender=newIPEndPoint(IPAddress.Any,0); EndPointRemote=(EndPoint)sender; data=newbyte[1024]; intrecv=server.ReceiveFrom(data,refRemote);//接受来自服务器的数据 Console.WriteLine("Messagereceivedfrom{0}:",Remote.ToString()); Console.WriteLine(Encoding.ASCII.GetString(data,0,recv)); while(true)//读取数据 { input=richTextBox1.Text;//从键盘读取数据 if(input=="text")//结束标记 { break; } server.SendTo(Encoding.ASCII.GetBytes(input),Remote);//将数据发送到指定的终结点Remote data=newbyte[1024]; recv=server.ReceiveFrom(data,refRemote);//从Remote接受数据 stringData=Encoding.ASCII.GetString(data,0,recv); Console.WriteLine(stringData); } Console.WriteLine("Stoppingclient"); server.Close(); }
二、TCP方式:
服务器端代码:
SocketserverSocket=null; ThreadclientThread=null; SocketclientSocket=null; Threadthread=null; IPAddressips=null; PEndPointipep=null; voidServerStart() { ips=Dns.GetHostAddresses(Dns.GetHostName())[0]; //创建IPEndPoint实例 ipep=newIPEndPoint(ips,9050); //创建一个套接字 serverSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); serverSocket.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReuseAddress,true); //将所创建的套接字与IPEndPoint绑定 serverSocket.Bind(ipep); //设置套接字为收听模式 serverSocket.Listen(20); while(listenalive) { try { //在套接字上接收接入的连接 clientSocket=serverSocket.Accept(); clientThread=newThread(newParameterizedThreadStart(ReceiveData)); clientThread.Start(clientSocket); } catch(Exceptionex) { WriteErrorLog(ex.Message); serverSocket.Close(); serverSocket=null; } } } staticvoidReceiveData(objectobj) { boolkeepalive=true; Sockets=objasSocket; Byte[]buffer=newByte[1024]; //根据收听到的客户端套接字向客户端发送信息 IPEndPointclientep=(IPEndPoint)s.RemoteEndPoint; Console.WriteLine("客户端ip:"+clientep.Address+"端口:"+clientep.Port); stringwelcome="连接服务器成功"; buffer=System.Text.Encoding.Unicode.GetBytes(welcome); //向客户端发送“连接服务器成功”消息 s.Send(buffer,buffer.Length,SocketFlags.None); buffer=newByte[1024]; intbufLen=0; stringcontent=string.Empty; while(true) { //在套接字上接收客户端发送的信息 bufLen=0; try { bufLen=s.Receive(buffer); if(bufLen==0) { break; } content+=System.Text.Encoding.Unicode.GetString(buffer,0,bufLen); } catch(Exceptionex) { break;; } } Send(s,content); s=null; buffer=null; clientep=null; Thread.CurrentThread.Abort(); }
客户端代码:
voidSend(stringcontent) { byte[]data=newbyte[1024]; newclient=newSystem.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,System.Net.Sockets.SocketType.Stream,System.Net.Sockets.ProtocolType.Tcp); ie=newSystem.Net.IPEndPoint(System.Net.IPAddress.Parse(ipadd),port);//服务器的IP和端口 try { //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。 newclient.Connect(ie); } catch(System.Net.Sockets.SocketExceptione) { Console.WriteLine(e.ToString()); return; } intrecv=newclient.Receive(data); //连接服务器成功 stringstringdata=System.Text.Encoding.Unicode.GetString(data,0,recv); if(stringdata=="连接服务器成功") { newclient.Send(System.Text.Encoding.Unicode.GetBytes(content)); newclient.Shutdown(System.Net.Sockets.SocketShutdown.Send); data=newbyte[1024]; recv=newclient.Receive(data); stringresult=System.Text.Encoding.Unicode.GetString(data,0,recv); newclient.Shutdown(System.Net.Sockets.SocketShutdown.Receive); newclient.Close(); MessageBox.Show(result); } else { MessageBox.Show("连接服务器失败","友情提示"); } }
希望本文所述对大家的C#程序设计有所帮助。