基于C#的同步Socket程序(TCP)

来源:互联网 发布:杜比音效增强软件 编辑:程序博客网 时间:2024/06/03 18:59

我们来编写一套简单的网络程序,这套网络程序分为客户端和服务端俩部分,客户端发送一行文本给服务器,服务器收到后将文本稍作改动后发回给客户端。

(注意:本程序使用的是TCP协议,并且为同步模式,后续我会再补充异步模式)

1.下图展示了一套基本的Socket通信流程。


2.Socket通信的基本流程具体步骤如下所示:

(1)开启一个连接之前,需要先完成Socket和Bind俩个步骤。Socket是新建一个套接字,Bind指定套接字的IP和端口(客户端在调用Connect时会由系统分配端口,因此可以省去Bind)

(2)服务器通过Listen开启监听,等待客户端接入。

(3)客户端通过Connect连接服务器,服务器通过Accept接收客户端连接。在connect-accept过程中,操作系统将会进行三次握手。

(4)客户端和服务端通过send(),receive()发送和接收数据,操作系统将会完成TCP数据的确认,重发等步骤。

(5)通过close关闭连接,操作系统会进行四次握手。

3.服务端代码如下:

using System;using System.Net;using System.Net.Sockets;namespace SyncTCPServer{class MainClass{public static void Main (string[] args){//socketSocket listenfd = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//bind//本机的ip地址和端口号IPAddress ipAdr = IPAddress.Parse ("127.0.0.1");IPEndPoint ipEp = new IPEndPoint (ipAdr, 1234);listenfd.Bind (ipEp);//Listenlistenfd.Listen(0);Console.WriteLine ("[服务器]启动成功");while (true) {//AcceptSocket connfd = listenfd.Accept ();Console.WriteLine ("[服务器]Accept");//Recvbyte[] readBuff = new byte[1024];int count = connfd.Receive (readBuff);string str = System.Text.Encoding.UTF8.GetString (readBuff, 0, count);Console.WriteLine ("[服务器接收]" + str);//Sendbyte[] bytes = System.Text.Encoding.Default.GetBytes ("serv echo:" + str);connfd.Send (bytes);}}}}
4.客户端代码如下:

using System;using System.Net;using System.Net.Sockets;namespace SyncTCPClient{class MainClass{public static void Main (string[] args){//SocketSocket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);Console.WriteLine (socket.LocalEndPoint);//Connect//要连接的服务器的ip地址与端口号IPAddress ipAdr=IPAddress.Parse("127.0.0.1");IPEndPoint ipEp = new IPEndPoint (ipAdr, 1234);socket.Connect (ipEp);//Sendstring str = "Hello World";byte[] bytes = System.Text.Encoding.Default.GetBytes (str);socket.Send (bytes);//Recvbyte[] readBuff=new byte[1024];int count=socket.Receive(readBuff);str = System.Text.Encoding.UTF8.GetString (readBuff,0,count);Console.WriteLine (str);//Closesocket.Close();Console.Read ();}}}
5.运行结果如下:

原创粉丝点击