------服务端代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; using System.Threading; namespace Socket聊天功能服务端 { class Program { static void Main(string[] args) { //1:创建Socket Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream , ProtocolType.Tcp); //2:给Socket绑定IP // 1) 创建一个IPAddress IPAddress iPAddress = IPAddress.Loopback; // 2) 创建一个IPEndPoint IPEndPoint iPEndPoint = new IPEndPoint(iPAddress, 8088); serverSocket.Bind(iPEndPoint); //2:启动socket监听 serverSocket.Listen(10); Console.WriteLine("服务端启动监听{0}成功", serverSocket.LocalEndPoint.ToString()); //3:当有客户端请求连接时,创建连接 Thread myThread = new Thread(ListenClientConnect); myThread.Start(serverSocket); } /// <summary> /// 接收客户端的连接 /// </summary> /// <param name="_serverSocket"></param> public static void ListenClientConnect(object _serverSocket) { while (true) { Socket serverSocket = _serverSocket as Socket; //运行到Accept()方法是会阻塞程序(同步Socket), Socket clientSocket = serverSocket.Accept();//此时 clientSocket 已经有了数据 //创建一个接受客户端发送消息的线程 Thread reciveThread = new Thread(ReciveAndSendMessage); reciveThread.Start(clientSocket); } } /// <summary> /// 服务端收到数据做事情 /// </summary> /// <param name="_clientSocket"></param> public static void ReciveAndSendMessage(object _clientSocket) { if (_clientSocket != null) { Socket clientSocket = _clientSocket as Socket; while (true) { try { byte[] m_DataBuffer = new byte[1024]; int reciverNumber = clientSocket.Receive(m_DataBuffer); string receivedMessage = Encoding.UTF8.GetString(m_DataBuffer, 0, reciverNumber); Console.WriteLine("客户端的{0}说:\"{1}\"", clientSocket.RemoteEndPoint.ToString(), receivedMessage); Console.WriteLine("请输入要发送的内容:"); string sendMsg = Console.ReadLine(); //将数据发给客户端 clientSocket.Send(Encoding.UTF8.GetBytes( sendMsg)); } catch (Exception ex) { Console.Write(ex.Message); clientSocket.Shutdown(SocketShutdown.Both); clientSocket.Close(); break; } } } } } }
------客户端代码
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Sockets; using System.Net; namespace Socket聊天功能客户端 { class Program { static void Main(string[] args) { //1 创建socket Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //2 服务端的IPendpoint IPAddress ip = IPAddress.Loopback; IPEndPoint iep = new IPEndPoint(ip, 8088); //3 和服务端进行连接 try { clientSocket.Connect(iep); } catch (Exception ex) { throw ex; } //发送信息到服务端和读取服务端发出的信息 while (true) { // 1)发送信息到服务端 Console.WriteLine("请输入你要发送的内容:"); string sendMessage = Console.ReadLine(); clientSocket.Send(Encoding.UTF8.GetBytes(sendMessage));//发送消息到服务端 // 2)从服务端接受消息 byte[] receiveByte = new byte[1024]; int receiveLength = clientSocket.Receive(receiveByte); string receiveMessage = Encoding.UTF8.GetString(receiveByte, 0, receiveLength); Console.WriteLine("服务端说:\"{0}", receiveMessage + "\""); } } } }
-----------------------------------------总结------------------------------
简单的来说
服务端:
1:创建服务端的socket 并启动监听
2:可以接收客户端的数据.也可发送数据到服务端
客户端:
1:创建客户端的socket 并和服务端进行连接(需指定连哪个服务端)
2:接受服务端的数据.也可发送数据到服务端