使用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、效果
- 先運行服務器窗口
- 再運行客戶端窗口
- 在服務器的窗口上會顯示客戶端的連接消息
