TCP通讯中:客户端如何指定软件的本地端口号?

最近在Socket 通讯中用 Socket完成了对客户端 接收服务端信息以及 往服务端发送信息的功能。具体方法介绍如下:

通过Load方法 加载到指定的服务端口(IP+Port)

class SocketClient
    {
        public static readonly SocketClient Current = new SocketClient();
        Thread threadClient = null;
        Socket socketClient = null;
        private string _ip = string.Empty;

// 1: 加载socket

public void Load(string ip, int port)
        {
            try
            {
                this._ip = ip;
                this._port = port;
                socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

IPAddress address = IPAddress.Parse(_ip);
                // 将获取的Ip地址和端口绑定在网络节点上
                IPEndPoint iPEndPoint = new IPEndPoint(address, _port);
                // 客户端socket 连接到网络节点上,用Connect
                socketClient.Connect(iPEndPoint);
                int clientPort = (socketClient.LocalEndPoint as IPEndPoint).Port;
                int remotePort = (socketClient.RemoteEndPoint as IPEndPoint).Port;

threadClient = new Thread(SocketDataReceived);
                threadClient.IsBackground = true;
                threadClient.Start();
            }
        }

//  2 消息接收

void SocketDataReceived()
        {
            try
            {
                if (socketClient == null)
                {
                    return;
                }

// 持续监听服务端发来的消息
                while (true)
                {

byte[] arrRecvmsg = new byte[1024 * 1024 * 2];
                    int length = socketClient.Receive(arrRecvmsg);
                    string strRevMsg = Encoding.UTF8.GetString(arrRecvmsg, 0, length);                   
                    if (strRevMsg.Contains("[RC]"))
                    {
                        ExportFoxconnShopfloor_JCManager.Current.ControlCMDRevMsg.Add(strRevMsg);
                    }
                }
            }
        }

// 消息发送

public void SocketWriteData(string sendMsg)
        {
                List<byte> sendLbyte = new List<byte>();

sendLbyte = Encoding.UTF8.GetBytes(sendMsg).ToList<byte>();
                socketClient.Send(sendLbyte.ToArray(), SocketFlags.None);
        }

}

以上完成了对 客户端socket的设置:

此时的客户端绑定的是服务器的端口,并没有为自己设计一个显示的端口,这样会出现一个问题: 当多个客户端连接同一个服务器的时候,服务器往指定的客户端输出

信息的时候会因为不知道客户的本地端口而无法往指定的端口输出信息,因此需要在创建客户端的时候指定客户端的端口号和IP,

具体方法如下:

在类中添加一个 TcpClient 的对象:
        TcpClient tcpClient = null;

在创建Load 的时候:

并不直接去创建 socket , 而是采用如下方式:

//设置本地端口

// IP 为 IPAddress.Any  设置本地端口 5001
                tcpClient = new TcpClient(new IPEndPoint(IPAddress.Any, 5001));
                // 连接服务器    
                tcpClient.Connect(iPEndPoint);
                socketClient = tcpClient.Client; // 设置 socket 用于接收和发送消息
                int clientPort = (socketClient.LocalEndPoint as IPEndPoint).Port; // 本地端口获取
                int remotePort = (socketClient.RemoteEndPoint as IPEndPoint).Port; // 服务端端口获取

这样就可以自定义 客户端的端口号和IP  方便 服务端发送信息。

TCP通讯中:客户端软件如何指定本地端口号?相关推荐

  1. 如何在SQL Management Studio中指定其他端口号?

    我试图连接到不在端口1433上的Microsoft SQL 2005服务器.使用SQL Management Studio连接到服务器时,如何指示其他端口号? #1楼 使用客户端管理器会影响所有连接或 ...

  2. 查看电脑IP和本地端口号

    查看电脑本机IP和本机端口号 1.查看本机ip Windows+R键打开"运行"窗口,输入CMD进入命令提示窗口,进入命令窗口之后,输入:ipconfig,IPV4即为本机的IP. ...

  3. Socket/Tcp游戏通信(一)-IP和端口号

    IP: 计算机在网络上的地址(可以理解为你家的快递地址),分为局域网IP(cmd ipconfig 可查IPv4和IPv6,如图)和公网IP, 每个局域网服务器对外对应一个公网IP 端口号: 计算机主 ...

  4. 【板栗糖GIS】怎么打开电脑指定的端口号

    [板栗糖GIS]怎么打开电脑指定的端口号 目录 1. 打开计算机的防火墙 2. 新建端口规则 3. 输入想要对接的端口号 1. 打开计算机的防火墙 找到高级设置 2. 新建端口规则 3. 输入想要对接 ...

  5. Beetle在Tcp通讯中使用Protobuf

    Protobuf是google制定的一种对象序列化格式,而在.net下的实现有protobuf-net.而protobuf-net在序列化方面有着出色的性能,效率是.net二进制序列化几倍,而序列化后 ...

  6. Beetle在TCP通讯中使用协议分析器和自定义协议对象

    在处理TCP数据的时候我们需要考虑一个粘包的问题,所谓的粘包就是本次接收的数据不一定完整对应对方发送的数据.对方发送的一次数据有可能需要接收多次才能完成,实际要处理的情况要复习一点;为了解决点包问题所 ...

  7. 如何在VB.NET中查询所有打印机端口名称,端口号ne

    文章目录 一.如何在VB.NET中查询所有打印机端口名称 二.使用步骤 1.引用 2.读入数据 总结 一.如何在VB.NET中查询所有打印机端口名称 本来想查询所有打印机的端口号 就是NE01 NE0 ...

  8. 中望CAD2015版网络版激活端口号

    TCP : 27000-27009 TCP : 47001 TCP : 49152-49152 TCP : 50155 TCP : 51014 TCP : 51089-51093 TCP : 4917 ...

  9. 虚拟机服务器改完端口要重启吗,VMware ESXi中安装虚拟机后怎么改端口号

    满意答案 wodel 2015.12.07 采纳率:53%    等级:9 已帮助:568人 1.进入到终端输入su以root用户进行登录,使用minicom必须要用root用户,然后输入minico ...

最新文章

  1. 【怒怼老乔】居然苹果手机IOS系统还不支持css3的transparent属性值,我去~~~~
  2. webstorm / intellij IDEA / phpstorm license server 激活链接 (过期留言更新)
  3. 表达对别人的感激之情
  4. TensorFlow------学习篇
  5. 成为一个拥有优势的人(转)
  6. 风控策略和模型的区别_智能风控平台核心之风控决策引擎(二)
  7. 两张神图介绍python3和 2.x与 3.x 的区别
  8. Twitter 宣布抛弃 Mesos,全面转向Kubernetes
  9. python中groupby()函数讲解与示例_详解python中groupby函数通俗易懂
  10. matlab里vpa怎么用_“学校里的师兄师姐,用英文怎么说?”
  11. 苹果手机html查看器在哪,web前端案例-苹果手机图片查看器
  12. 【计算机网络笔记】计算机网络定义分类
  13. 二叉树遍历(递归与非递归版本)
  14. Windows Server 2012R2 安装IIS 的详细配置
  15. gpt和mbr用来装服务器系统,给win10分区用MBR还是GPT?详解MBR还是GPT的区别
  16. apt cyg 安装php,Windows下安装Cygwin及apt-cyg
  17. 大名鼎鼎的 Linux —— 进程,线程,协程
  18. sprintf_s、_snprintf与_snprintf_s
  19. Range-based for(C++20)
  20. 项目一 Windows Server 2012 R2服务器安装与配置

热门文章

  1. 歌谣学前端之React中渲染列表
  2. 问卷调查工具实力榜单发布
  3. SaltStack系统初始化
  4. 和氟西汀类似的备注_氟西汀一样好听的网名有哪些
  5. java监理的职责,监理工作总结应包括( )等主要内容。
  6. 直播类app开发,实现一个进度条效果
  7. 接线端子名PH,XH,ZH的区别
  8. 计算机毕业设计Java游泳馆管理平台(系统+程序+mysql数据库+Lw文档)
  9. redis实现延迟任务
  10. 移动路由器当文件服务器,通过 SNMP 在路由器和 TFTP 服务器之间移动文件和镜像...