程序采用TCP协议,当然神马是TCP协议呢,大家可以自行百度之。长话短说,为了C#方便使用TCP协议,在
using System.Net.Sockets;里面使用TcpListener类简化了TCP的服务器端操作,注意是服务器端,毕竟在服务器端我们才需要监听。
我们只需要定义一个实体变量,这样就可以进行服务器操作了。
当然TcpListener有两个参数格式如下
public TcpListener(IPAddress localaddr,int port) 第一个参数表示本地的IP地址,第二个参数表示监听的端口号
当我们设置好了之后,采用start()开始侦听连接请求,如果收到连接请求,则start()对请求进行排队,继续监听是否还有下一个请求,直到调用到stop方法为止。
当然stop方法就是关闭TcpListener并停止监听。
程序中采用publi Socket AcceptSocket(),这个是一个阻塞的方法,当有客户连接的时候返回一个socket实例,这样就可以调用Send与Receive方法来发送消息
为了更加方便的传输数据,程序采用NetworkStream类来访问网络数据流。
当然前提就是创建一个NetworkStream的新实例,采用这个方法public NetworkStream(Socket socket)里面参数socket就是用来发送数据的socket刚好结合上面的AcceptSocket就可以创建数据流了。
此时接收数据采用 StreamRead,发送数据采用StreamWrite,这样就可以发送数据了。
好了,下面是程序中的部分代码,帮助更好的理解
这是直接从程序复制的,有些参数可能用不上
定义参数
private TcpListener tcpListener;
private NetworkStream[] netWorkStream;
private StreamReader[] streamReader;
private StreamWriter[] streamWriter;
private Socket[] socketForClient;
private int CurPort;
private IPAddress CurIp;
开始监听
private void btnStratServer_Click(object sender, EventArgs e) { serverThread = new Thread(new ThreadStart(Listen)); serverThread.Start(); // Listen(); }
必要参数赋值
CurIp = IPAddress.Parse(txtIP.Text); CurPort = Convert.ToInt32(txtPort.Text); tcpListener = new TcpListener(CurIp, CurPort); //开始监听 tcpListener.Start(); listInfo.Items.Add("服务器开始启动");
监听
socketForClient[i] = tcpListener.AcceptSocket();
创建数据流
netWorkStream[i] = new NetworkStream(socketForClient[i]); streamReader[i] = new StreamReader(netWorkStream[i]); streamWriter[i] = new StreamWriter(netWorkStream[i]); recvThread = new Thread(new ParameterizedThreadStart(RecvAndSendData)); recvThread.Start(i);
发送数据与接收数据示例
streamWriter[i].WriteLine("hahahahahah"); streamWriter[i].Flush();
string Pass = streamReader[i].ReadLine();
好了到现在基本上流程就实现了,还有问题的话私心我,可以发给源代码研究\(^o^)/~