博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#Socket通信
阅读量:4686 次
发布时间:2019-06-09

本文共 3891 字,大约阅读时间需要 12 分钟。

网络通信的基本知识:

首先应该确定IP地址和端口号,端口号为了确定计算机的哪个进程,比如同一主机是微信还是qq通信

要进行通信首先应该确定一种协议,通常用TCP可靠和UDP不可靠协议,当然带来的速度也会不同,多数游戏中采用TCP协议。

 

面向连接套接字通信步骤:

服务端:

先申请一个Socket,绑定一个IP地址和端口,开始接听,等待接受连接。

客户端:

申请一个Socket,连接服务器且指定IP和端口号

值得注意的是,服务端有两个Socket,一个用于监听,另一个和客户端进行通信。

 

服务器端代码:

using System.Net.Sockets;using System.Net;using System.Threading;namespace Socket套接字{    class SocketT    {        private Socket _ServerSocket;                       //服务器监听套接字        private bool _IsListionContect;                     //是否在监听        public SocketT()        {            //定义网络终节点(封装IP和端口)            IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"),1000);            //实例化套接字            _ServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            //服务端绑定地址            _ServerSocket.Bind(endPoint);            //开始监听            _ServerSocket.Listen(10);                       //监听的最大长度            Console.WriteLine("服务器已经启动...");            try            {                while (_IsListionContect)                {                    //Accept()方法接受客户端的连接,这个方法会阻断当前线程的运行                    Socket sockMsgSever = _ServerSocket.Accept();                    Console.WriteLine("有一个客户端连接...");                    //开启后台线程,进行客户端会话                    Thread thClientMsg = new Thread(ClientMsg);                    thClientMsg.IsBackground=true;          //设置为后台线程                    thClientMsg.Name = "thClientMsg";                    thClientMsg.Start(sockMsgSever);                }            }            catch (Exception)            {                                throw;            }        }        ///         /// 服务器端和客户端通信的后天线程        ///         ///         private void ClientMsg(object sokMsg)        {            Socket socketMsg = sokMsg as Socket; //将object类型转换为Socket通信            while (true)            {                //准备一个数据缓存                byte[] msyArray = new byte[0124 * 0124];                //接受客户端发来的请求,返回真实的数据长度                int TrueClientMsgLenth = socketMsg.Receive(msyArray);                //byte数组转字符串                string strMsg = Encoding.UTF8.GetString(msyArray, 0, TrueClientMsgLenth);                //显示客户端数据                Console.WriteLine("客户端数据:"+strMsg);            }        }        static void Main(string[] args)        {            SocketT obj = new SocketT();        }    }}

 客户端:

using System.Threading;using System.Net;using System.Net.Sockets;namespace Socket套接字_客户端{    class Client    {        private Socket _ClientSocket;                       //客户端通讯套接字        private IPEndPoint SeverEndPoint;                   //连接到服务器端IP和端口        public Client()        {            //服务器通信地址            SeverEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1000);            //建立客户端Socket            _ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            try            {                _ClientSocket.Connect(SeverEndPoint);            }            catch (Exception)            {            }            Console.WriteLine("连接服务器端成功!");        }        //连接服务器        public void SendMsg()        {            while (true)            {                //输入信息                string strMsg = Console.ReadLine();                //退出                if (strMsg == "exit")                {                    break;                }                //字节转换                Byte[] byeArray = Encoding.UTF8.GetBytes(strMsg);                //发送数据                _ClientSocket.Send(byeArray);                Console.WriteLine("我:" + strMsg);            }            //关闭连接            _ClientSocket.Shutdown(SocketShutdown.Both);            //清理连接资源            _ClientSocket.Close();        }        static void Main(string[] args)        {            Client obj = new Client();            obj.SendMsg();        }    }}

 

转载于:https://www.cnblogs.com/Optimism/p/10512903.html

你可能感兴趣的文章
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>
题目1462:两船载物问题
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>
第二冲刺阶段个人博客5
查看>>
UVA 116 Unidirectional TSP (白书dp)
查看>>
第三方测速工具
查看>>
MySQL 网络访问连接
查看>>
在aws ec2上使用root用户登录
查看>>
数据访问 投票习题
查看>>
CIO知识储备
查看>>
cnblog!i'm coming!
查看>>
使用点符号代替溢出的文本
查看>>
Axios 中文说明
查看>>