Socket编程学习

https://www.cnblogs.com/wangcq/p/3520400.html socket通信原理。

Socket 是在 C#

使用Socket通信 一般有3步;

服务端:

1,建立Socket

2.Bind Ip端口 

3.开始监听

4.等待客服端链接()

客服端

1. 建立Socket

2. 链接 主机(connect)

3. send(Receive)

 

服务端:

           这里的Ip为你的IP地址  端口随便,只要计算机没有占用的就OK

            EndPoint endPoint = new IPEndPoint(IPAddress.Parse("xxx.xx.xxx.xxx"),7788);
            TcpSocket.Bind(endPoint);

 static void Main(string[] args)
        {
            //1 创建socket
            Socket TcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //2 绑定ip
//这里的Ip为你的IP地址  端口随便,只要计算机没有占用的就OK
            EndPoint endPoint = new IPEndPoint(IPAddress.Parse("xxx.xx.xxx.xxx"),7788);
            TcpSocket.Bind(endPoint);
            //3 开始 监听

            TcpSocket.Listen(100);
            Console.WriteLine("服务端启动,开始监听");
            Socket client = TcpSocket.Accept();
            Console.WriteLine("链接进来了一个客服端");
            client.Send(Encoding.UTF8.GetBytes("服务器:您好,我是服务器!"));

            byte[] data = new byte[1024];
            int length = client.Receive(data);

            Console.WriteLine("来自客服端的消息"+Encoding.UTF8.GetString(data, 0, length));

        }


 EndPoint 是标识网络地址。 这是一个 abstract 类。

IPEndPoint是 它 的子类,

最大端口是65535

最小是0

两个 构造函数 体

他有三个方法  2个构造函数 ,两个构造函数里的参数 都差不多一个意思,只是类型不一样,

第一个参数都是Ip地址,第二个都是端口。

IPAddress 是   提供 Internet 协议 (IP) 地址。

IPv6和IPv4的区别https://zhidao.baidu.com/question/113756183.html

   

/ /摘要:    public Socket Accept();
        //     创建一个新 System.Net.Sockets.Socket 为新创建的连接。
        //
        // 返回结果:
        //     一个 System.Net.Sockets.Socket 为新创建的连接。
        //
        // 异常:
        //   T:System.Net.Sockets.SocketException:
        //     尝试访问套接字时出错。 有关详细信息,请参阅备注部分。
        //
        //   T:System.ObjectDisposedException:
        //     System.Net.Sockets.Socket 已关闭。
        //
        //   T:System.InvalidOperationException:
        //     接受套接字不侦听连接。 必须调用 System.Net.Sockets.Socket.Bind(System.Net.EndPoint) 和 System.Net.Sockets.Socket.Listen(System.Int32)
        //     之前调用 System.Net.Sockets.Socket.Accept。

Socket client = TcpSocket.Accept();  Accept 会等待 客服端链接进来,

客户端: 

这里 要Connect 的Ip和端口要和上面的  一致

 client.Connect(IPAddress.Parse("xxx.xx.xxx.xxx"), 7788);

  static void Main(string[] args)
        {
            Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.Connect(IPAddress.Parse("xxx.xx.xxx.xxx"), 7788);

            byte[] data = new byte[1024];
            int length = client.Receive(data);
            Console.WriteLine(Encoding.UTF8.GetString(data, 0, length));
            client.Send(Encoding.UTF8.GetBytes("我链接进来啦"));
        }  

client.Receive(data)

参数就是一个容器,返回值是它长度;

 

下面是Send()

参数是要发送的数据,字节,通过流来传输,返回值是发送到的字节;

 

 

这个是socket的使用,   如果需要一直通信 ,可以用while 和线程来实现

while(true)

{

Socket client=TcpServer.Accept(); 

}这样可以让别人一直进来。

判断是否断开链接 可以用 Poll 方法 ,第一个参数是微秒单位时间,第二个是选择模式,有读/写  Error

     while (m_client.Poll(10,SelectMode.SelectRead))  表示 10微秒后如果拉不回来 就是返回false

最好就是用个Client 类 封装 客服端Socket, 然后在服务端里面 对他们进行管理;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值