网络编程实现的机制:
服务器端:
申请一个socket
绑定到一个IP地址和端口上
开启侦听,等待接受连接
客户端:
申请一个socket
连接服务器(指明IP、端口)
服务器端:
接收到连接请求后,产生一个新的socket与客户端建立连接并进行通讯,原侦听socket继续侦听
============================================================================
一、客户端 连接 服务器:
服务器端代码:
//创建 服务器 负责监听的套接字 ,参数(使用IP4)
socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//获得文本框中的IP地址
IPAddress address = IPAddress.Parse(txtIp.Text.Trim());
//创建包含IP和Port的网络节点对象
IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));
//将负责监听的套接字绑定到唯一的IP和端口上
socketWatch.Bind(endpoint);
//设置监听队列的长度
socketWatch.Listen(10);
Socket sokConnection = socketWatch.Accept(); //一旦客户端的请求,就会返回一个和该客户端通信的套接字sokConnection
ShowMsg("客户端连接成功");
客户端连接代码:
IPAddress address = IPAddress.Parse(txtIp.Text.Trim());
IPEndPoint endPoint = new IPEndPoint(address,int.Parse(txtPort.Text.Trim()));
Socket socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socketClient.Connect(endPoint);
====================================================================================
二、发送、接收数据
发送数据:
string strMsg = txtMsgSend.Text.Trim();
//将字符串 转成 方便网络传送的二进制数据
byte[] arrMsg = System.Text.Encoding.UTF8.GetBytes(strMsg);
socketClient.Send(arrMsg);
ShowMsg("我说: "+strMsg);
接收数据:
void RecMsg()
{
while (true)
{
//定义一个接收用的 缓存区(2M字节数组)
byte[] arrMsgRec = new byte[1024 * 1024 * 2];
//将接收到的数据存入arrMsgRec 数组,并返回真正接收到的数据的长度
int length=socketClient.Receive(arrMsgRec);
string strMsgRec = System.Text.Encoding.UTF8.GetString(arrMsgRec,0,length); //后面两个参数用于解决换行,来自视频10
ShowMsg(strMsgRec);
}
}