C#Socket网络编程(二) TCP服务器端和客户端连接
Socket(套接字)编程(Tcp)
1.基于Tcp协议的Socket通讯类似于B/S架构,面向连接,但不同的是服务器端可以向客户端 主动推送消息。
使用Tcp协议通讯需要具备以下几个条件:
(1).建立一个套接字(Socket)
(2).绑定服务器端IP地址及端口号--服务器端
(3).利用Listen()方法开启监听--服务器端
(4).利用Accept()方法尝试与客户端建立一个连接--服务器端
(5).利用Connect()方法与服务器建立连接--客户端
(6).利用Send()方法向建立连接的主机发送消息
(7).利用Receive()方法接受来自建立连接的主机的消息(可靠连接)
服务器端:
1 using System; 2 using System.Net; 3 using System.Net.Sockets; 4 using System.Text; 5 6 namespace TCP服务器端TcpServer 7 { 8 internal class Program 9 { 10 static void Main(string[] args) 11 { 12 //Console.WriteLine("Hello World!"); 13 //1234 14 // IP 192.168.1.145 Port端口号 内网=局域网 外网 15 //网络地址 16 //城市 路 小区 单元 xx 小明收 17 //城市 路 小区 单元 xx 18 // xx楼 x单元 xx 19 Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 20 21 IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 1, 184 }); 22 // IP + Port 23 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 6688); 24 //绑定ipEndPoint 25 tcpServer.Bind(ipEndPoint); 26 //最大连接数 27 tcpServer.Listen(100); 28 29 Console.WriteLine("开始接客了 ..."); 30 //等待客户端连接 31 Socket client = tcpServer.Accept(); 32 Console.WriteLine("一个客户端链接过来了"); 33 //分配1024个字节大小的内存给data 34 byte[] data = new byte[1024]; 35 //接收客户端消息 36 int length = client.Receive(data); 37 //转码 38 string message = Encoding.UTF8.GetString(data, 0, length); 39 Console.WriteLine("收到了客户端消息:" + message); 40 //向客户端发送消息 41 client.Send(Encoding.UTF8.GetBytes("你来了呀")); 42 //流结束时要关闭,遵循先开后关的原则 43 client.Close(); 44 45 tcpServer.Close(); 46 } 47 } 48 }
客户端:
1 using System; 2 using System.Net.Sockets; 3 using System.Net; 4 using System.Text; 5 6 namespace TCP客户端 7 { 8 class Program 9 { 10 static void Main(string[] args) 11 { 12 //socket 13 Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 14 //ip 15 IPAddress ipAddress = new IPAddress(new byte[] { 192, 168, 1, 184 }); 16 //ip + Port(端口) 17 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 6688); 18 //连接服务器端 19 tcpClient.Connect(ipEndPoint); 20 Console.WriteLine("链接上服务器端了"); 21 //向服务器发送消息 22 //转码为byte字节发送 23 tcpClient.Send(Encoding.UTF8.GetBytes("我连接上了")); 24 //分配1024个字节大小的内存给message 25 byte[] message = new byte[1024]; 26 //接收消息 27 int length = tcpClient.Receive(message); 28 //转码为string接收 29 string data = Encoding.UTF8.GetString(message, 0, length); 30 Console.WriteLine("收到服务器消息:" + data); 31 //关闭Socket 32 tcpClient.Close(); 33 } 34 } 35 }
客户端与服务器连接成功