Socket编程学习

news/2024/5/17 19:25:19 标签: Socket, Tcp

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, 然后在服务端里面 对他们进行管理;

 


http://www.niftyadmin.cn/n/770133.html

相关文章

Socket学习下

using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; using System.Net.Sockets; using System.Threading; namespace Socket_聊天室_socketTcp服务端 {public class Client{private Socket m_client;byte[] data new byte[10…

Socket编程UDP协议

使用Socket 里的Udp协议,SocketType 数据传输方式用Dgram 数据报,使用UDP 通信不需要建立链接 ,只要知道对方的IP 和端口号 即可 。 UDP 即可以作为服务端 也可以作为客服端。 static Socket UDPSocket;static void Main(string[] args){//1 创建 sock…

TcpListenerUDPListener

TcpListener UDPListener 他们都在TCP UDP基础上的一层封装,封装了Socket 服务端: static void Main(string[] args){//1.创建TcpListener 里面包含Socker对象TcpListener tcpListener new TcpListener(IPAddress.Parse("172.17.144.3"), 7…

Unity获取 鼠标 插值的 几种 方法

说说思路实现 Unity中获取 鼠标插值的原理是  用上一帧鼠标的位置 减去这一帧的鼠标位置的值,然后要进行对第一次进行判断,判断这一次位置是不是原来的值,如果不是就进行差 运算,得出偏移量。再把上一次的位置的值给这个一次…

梦想与远方

对于近期生活的一些思考,我发现,到了工作的地方后,工作了几个星期,很快就适应 了节奏,不知道是因为项目刚刚立项的原因,还是因为别的,发现自己开始变得懒惰了,这样可不行&#xff0c…

编辑器扩展AssetModificationProcessor 脚本模板功能

AssetModificationProcessor、 在编辑模式下可以让你的Unity资源 保存序列化 前 勾住它, 防止Unity 在写入资源 提前把它锁住,对它进行处理 Unity Editor下对资源进行操作时调用AssetModificationProcessor . Leave feedback Description AssetMo…

GitHub的使用记录

官方导读 Github Hello World(教你如何新建仓库,和project 分支管理) 1.注册GitHub账号 2.下载安装Git for Windows 3. 配置Git 4. 连接GitHub 此处默认你已经 注册好了账号。 下载安装Git for Windows 傻瓜式的安装 一路next接着打…

最近在做个一编辑器扩展的打包工具记录分享下

Github地址:最近才开的https://github.com/qq21/EditorExtendLearning.git