首页 > 其他分享 >网络通信Socket

网络通信Socket

时间:2024-03-22 16:33:17浏览次数:22  
标签:网络通信 Console cli ar socket User data Socket

public List<User> users = new List<User>();
Socket socket;
//初始化服务器
public void InitSever()
{
    //创建一个Socket对象
    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    //将把通信的地址和端口绑定到 socket 上
    socket.Bind(new IPEndPoint(IPAddress.Any, 2003));
    //链接最大限制
    socket.Listen(10);
    Console.WriteLine("服务器已开启");

    //ThreadPool.QueueUserWorkItem(OnAccept);
    //开线程
    //Thread thread = new Thread(OnAccept);
    //thread.Start();

    //异步等待连接
    socket.BeginAccept(AsyOnAccept, null);
}
//异步发消息给客户端
public void AsyOnSendClient(byte[] data,User cli)
{
    cli.socket.BeginSend(data, 0, data.Length, SocketFlags.None, AsyOnSend, cli);
}

private void AsyOnSend(IAsyncResult ar)
{
    User cli = ar.AsyncState as User;
    int len=cli.socket.EndSend(ar);
    Console.WriteLine("发送到客户端得小时长度是:"+len);
}

private void AsyOnAccept(IAsyncResult ar)
{
    try
    {
        Socket socket_cli=socket.EndAccept(ar);
        IPEndPoint iPEnd=socket_cli.RemoteEndPoint as IPEndPoint;
        User u = new User();
        u.socket = socket_cli;
        u.name = iPEnd.Port.ToString();
        users.Add(u);
        Console.WriteLine("用户"+u.name+"链接");
        //再次开启等待新用户链接
        socket.BeginAccept(AsyOnAccept, null);
        //异步接收消息
        socket_cli.BeginReceive(u.data,0,u.data.Length,SocketFlags.None,AsyOnReceive,u);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}
//异步接受消息
private void AsyOnReceive(IAsyncResult ar)
{
    try
    {
        User cli = ar.AsyncState as User;
        int len =cli.socket.EndReceive(ar);
        if(len>0)
        {
            Console.WriteLine("收到消息长度:" + len);
        }
        cli.socket.BeginReceive(cli.data, 0, cli.data.Length, SocketFlags.None, AsyOnReceive, cli);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
    }
}
/*同步
开启线程  用户连接*/
private void OnAccept()
{
    while (true)
    {
        //客户端链接服务器
        Socket smallSocket = socket.Accept();
        IPEndPoint point = smallSocket.RemoteEndPoint as IPEndPoint;
        User u = new User();
        u.socket = smallSocket;
        u.name = smallSocket.RemoteEndPoint.ToString();
        users.Add(u);
        Console.WriteLine("用户{0}链接成功", point.Address);

        while (true)
        {
            //服务器接收客户端
            smallSocket.Receive(u.data);
            Console.WriteLine("收到{0}", UTF8Encoding.UTF8.GetString(u.data));
            //服务器回复客户端
            Sendstr(u.data, u);
        }
    }
}
//回复客户端
private void Sendstr(byte[] data, User u)
{
    u.socket.Send(data);
}

标签:网络通信,Console,cli,ar,socket,User,data,Socket
From: https://blog.csdn.net/lihao030805/article/details/136944534

相关文章

  • tcp/ip网络通信时的大小端序转换
    1.短整形/长整形的转换#include<arpa/inet.h>//u:unsigned//16:16位,32:32位//h:host,主机字节序//n:net,网络字节序//s:short//l:int//这套api主要用于网络通信过程中IP和端口的转换//将一个短整形从主机字节序->网络字节序uint16_thtons(......
  • aiohttp unix socket 启动简单说明
    aiohttp官方推荐了不少部署模式,以下是关于unixsocket部署的简单说明参考配置web.pyfromaiohttpimportwebimportargparseparser=argparse.ArgumentParser(description="aiohttpapp")parser.add_argument('--path')asyncdefhello(request):......
  • 网络通信——IP地址、端口号、协议(TCP、UDP)
    通信架构网络通信三要素IP地址IPv4地址 IPv6地址IP域名  IP常识 端口号概念协议 开放式网络互联标准:OSI、TCP/IP 传输层的2个通信协议——UDP、TCPTCP协议:三次握手建立建立可靠连接  进行三次握手的原因:为了确保客户端和服务端接收/发送消息都没有......
  • SpringBoot建立websocket连接
    介绍WebSocket协议是一种基于TCP的协议,用于在客户端和服务器之间建立持久连接,并且可以在这个连接上实时地交换数据。WebSocket协议有自己的握手协议,用于建立连接,也有自己的数据传输格式。当客户端发送一个WebSocket请求时,服务器将发送一个协议响应以确认请求。在握手期间,......
  • 31.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-其它消息的实现与使用优化
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!如果看不懂、不知道现在做的什么,那就跟着做完看效果内容参考于:易道云信息技术研究院VIP课上一个内容:30.数据搜索功能码云地址(master分支):https://gitee.com/dye_your_fingers/titan码云版本号:6cd3ae3d3bf803e1......
  • 在非标准Spring组件中(比如websocket)注入Spring管理bean的方法
    privatestaticUserMapperuserMapper;@AutowiredpublicvoidsetUserMapper(UserMapperuserMapper){WebSocketServer.userMapper=userMapper;}WebSocketServer是通过JavaWebSocketAPI创建的,并且由于@ServerEndpoint不是Spring的标准组件注解,直......
  • socket 技术是干什么的?底层原理是什么?
    Socket技术是一种通信机制,用于实现不同计算机之间的网络通信和同一计算机内不同进程之间的进程间通信。它是一种抽象层,使得不同操作系统和编程语言的程序能够在网络上相互通信。底层原理方面,Socket技术基于网络协议栈和操作系统提供的网络编程接口。当程序使用Socket技术......
  • Socketserver模块
    Socketserver模块socketserver主要是针对服务端来做的,所以对于客户端代码,并没有太多的改变网络协议的最底层就是socket,基于原有socket模块,又封装了一层,就是socketserversocketserver为了实现tcp协议,server端的并发首先,你必须通过子类化BaseRequestHandler类并重......
  • SocketIO高性能事件驱动设计探索
    来源:https://segmentfault.com/a/1190000021554678?utm_source=tag-newest背景SocketIO原生基于NodeJS实现的Web长连接技术方案,H5原生场景下通常使用websocket作为基础协议进行网络通信(客户端支持多语言),SocketIO对于长连接场景下的业务形态进行了很多方面的抽象和实现,比如:命名空......
  • C++ Qt开发:QUdpSocket实现组播通信
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QUdpSocket组件实现基于UDP的组播通信。组播是一种一对多的通信方式,允许一个发送者将数......