使用Tcp协议实现最简单的服务器与客户端通信
1、方法介绍
public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);
参数1:指定Socket使用的寻址方案(IPV4还是IPV6)
AddressFamily.InterNetwork:IPV4类型
AddressFamily.InterNetworkV6: IPV6类型
参数2:指定Socket的类型
SocketType.Stream:Tcp使用的字节流
SocketType.Dgram:Udp使用的数据报
参数3:指定Socket使用的协议
ProtocolType.Tcp:TCP协议
ProtocolType.Udp:UDP协议
IPEndPoint()
是一个IP地址和端口号的集合
IPAddress.Parse("127.0.0.1")
把字符串转换为IPAddress实例
2、服务器端
static void Main(string[] args)
{
//1.创建socket
Socket tcpServer = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//2.绑定IP和端口号
EndPoint point = new IPEndPoint(IPAddress.Parse("172.168.33.33"), 6666);
tcpServer.Bind(point); //绑定方法
//3.开始监听,等待用户连接
tcpServer.Listen(100); //监听方法,最大连接数为100
Socket tcpClient = tcpServer.Accept(); //等待连接,此为阻塞方法
Console.WriteLine("客户端连接。。。");
//4.接收用户发送的消息
byte[] data = new byte[1024];
int length = tcpClient.Receive(data); //接收数据data
string str = Encoding.UTF8.GetString(data); //字节数组转换为string
Console.WriteLine("接收到客户端的数据为:" + str);
Console.ReadKey();
}
3、客户端
static void Main(string[] args)
{
//1.创建socket
Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//2.发起连接请求
EndPoint point = new IPEndPoint(IPAddress.Parse("172.168.33.33"), 6666);
tcpClient.Connect(point); //连接
//3.向服务器发送消息
byte[] data = Encoding.UTF8.GetBytes("Hello I am Ffly");
tcpClient.Send(data); //发送数据
Console.ReadKey();
}
4、效果
- 先运行服务器窗口
- 再运行客户端窗口
- 在服务器的窗口上会显示客户端的连接消息