利用C#进行socket编程(模拟服务器和客户端通信)

来源:互联网 发布:什么动物知天下事 编辑:程序博客网 时间:2024/06/05 04:20

制作网络游戏难免需要使用socket,利用socket可以实现客户端和服务器的数据交换。服务器需要绑定特点IP地址和端口号,而客户端访问服务器也需要连接到服务器的IP和服务器相应的端口号。每台计算机(可以看作服务器)都有唯一的一组IP,正常情况下端口号(0-60000)是软件之间在进行数据交流的唯一通道。

以下有一个简单的服务器端和一个客户端,大致解释了服务器向客户端发送消息的过程:

using System;using System.Net;using System.Net.Sockets;using System.Text;namespace Socket编程_TCP服务器端{    class Program    {        static void Main(string[] args)        {            //1,创建socket             using System.Net.Sockets;            //AddressFamily.InterNetwork内网,SocketType.Stream以流来通信,第三个为协议            Socket tcpSever = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);            //2,绑定服务器IP(计算机唯一标识)和端口号。端口号将通信数据给指定的软件。一个软件占用一个特定端口号(0-60000)            //查看本机IP:cmd-》ipconfig  本机局域网IP:198.168.1.2             //IPAddress ipAddress = new IPAddress(new byte[] { 192,168,1,2});            EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.1.2"),7788);//IPEndPoint是对IP+端口号的一层封装            tcpSever.Bind(point);//向操作系统申请一个可用的IP和端口号做通信。绑定当前IP和端口号            //3.监听。等待客户端连接            tcpSever.Listen(100);//参数是最大连接数            Socket clientSocket= tcpSever.Accept();//暂停当前线程,直到一个客户端连接过来,之后进行下面的代码。返回的socket为客户端socket            //使用返回的socket跟客户端做通信            string message = "welcome!";            byte[] meg= Encoding.UTF8.GetBytes(message);//对字符串编码,得带一个字节数组            clientSocket.Send(meg);            //接受客户端数据            byte[] buffer = new byte[1024];             int length= clientSocket.Receive(buffer);//接受客户端数据            string mes = Encoding.UTF8.GetString(buffer, 0, length);            Console.WriteLine(mes);            tcpSever.Close();            Console.ReadKey();        }    }}

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;namespace Socket_客户端_TCP{    class Program    {        static void Main(string[] args)        {            //创建socket            Socket tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //发起连接请求            EndPoint remoteIp = new IPEndPoint(IPAddress.Parse("192.168.1.2"), 7788);            tcpClient.Connect(remoteIp);//连接远程已经绑定IP和端口号的服务器端。已连接远程主机。            //从远程主机接受数据并显示在客户端            byte[] buffer = new byte[1024];            int byteNum= tcpClient.Receive(buffer);//将接受到的数据,存入buffer。返回值为接受到的字节数            string message= Encoding.UTF8.GetString(buffer,0,byteNum);//将接受到的数据,转化为字符串            Console.WriteLine(message);            //发送给服务器            string clientToSeverMes = "客户端:你好,服务器!";            byte[] cts = Encoding.UTF8.GetBytes(clientToSeverMes);            tcpClient.SendTo(cts, remoteIp);            Console.ReadKey();        }    }}
阅读全文
1 0
原创粉丝点击