原文:
C# Socket通信的服务器与客户端
客户端代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace ClientSocket { class Program { private static byte[] result = new byte[1024]; static void Main(string[] args) { //设定服务器IP地址 IPAddress ip = IPAddress.Parse("127.0.0.1"); Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { clientSocket.Connect(new IPEndPoint(ip, 8885)); //配置服务器IP与端口 Console.WriteLine("连接服务器成功"); } catch { Console.WriteLine("连接服务器失败,请按回车键退出!"); return; } for (int i = 0; i < 10; i++) { try { Thread.Sleep(1000); //等待1秒钟 string sendMessage = "client send Message Hellp" + DateTime.Now; clientSocket.Send(Encoding.ASCII.GetBytes(sendMessage)); Console.WriteLine("向服务器发送消息:{0}" + sendMessage); } catch { clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); break; } } Console.WriteLine("发送完毕,按回车键退出"); Console.ReadLine(); } } }
服务器端代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; using LogHelper; using System.IO; using System.Diagnostics; namespace SocketForm { class SocketConnection { private int port;//监听端口号 private static byte[] result = new byte[1024]; private static Socket server;//服务器Socket private IPAddress ip;//Ip地址 private static Socket client;//客户端Socket private static Thread myThread;//启动监听线程 private static Thread receiveThread;//接收数据线程 public SocketConnection(string ipadr,int port) { this.port = port;//初始化端口 ip = IPAddress.Parse(ipadr);//初始化ip地址 } public void setConnection() { server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化socket对象(采用网络流传输方式,TCP协议传输) server.Bind(new IPEndPoint(ip, port));//绑定ip及端口 Console.WriteLine("绑定端口ip"+this.ip+":"+this.port); server.Listen(10);//监听端口 Console.WriteLine("正在监听IP"+this.ip+" 端口:"+this.port+"......"); Log.Errorname = "Info"; Log.CreateLogTxt("监听Ip"+this.ip+"端口"+this.port+"......"); myThread = new Thread(ListenClientConnect); myThread.Start(); } private static void ListenClientConnect() { while (true) { client = server.Accept(); receiveThread = new Thread(ReceiveMessage); receiveThread.Start(client); } } /// <summary> /// 接收消息 /// </summary> /// <param name="clientSocket"></param> private static void ReceiveMessage(object clientSocket) { client = (Socket)clientSocket; while (true) { try { //通过clientSocket接收数据 int receiveNumber = client.Receive(result);//获取接收数据的长度 StreamWriter resultMessage = new StreamWriter("out.txt", true);//输出流实例化 resultMessage.WriteLine("接收客户端{0}消息{1}", client.RemoteEndPoint.ToString(), Encoding.ASCII.GetString(result, 0, receiveNumber)); resultMessage.Close(); Log.Errorname = "Info"; Log.CreateLogTxt("信息获取成功"); Console.WriteLine("信息获取成功"); } catch (Exception ex) { Log.Errorname = "ERROR"; Log.CreateLogTxt("从服务器获取数据错误"+"错误信息"+ex.Message); Console.WriteLine("从服务器获取数据错误" + "错误信息" + ex.Message); client.Shutdown(SocketShutdown.Both); client.Close(); break; } } } } }