多线程socket同一个IP和端口,只有15个线程能够成功

多线程socket同一个IP和端口,只有15个线程能够成功,第1张

分两种情况来讲。
1,应用程序是client,绑定端口,读写同一个socket,因为对socket读和写是原子的,同时有且仅有一个线程可以发送和接收,那么,哪个线程获得了锁,就哪个读或者是写。
2,应用程序是server,绑定端口port1,因为通常用一个socket来接收新的连接,不同的线程来处理新建的连接,这个时候 ,不会有冲突发生,因为,读写的是不同的socket。
最后,纠正一下,应用程序不是直接通过端口与其它应用通信的,而是通过 *** 作系统封装过的一个抽象的数据类型socket与其它应用通信。对于TCP/IP来说,一个socket至少包含这样四个元素,本机ip、本机port、远程ip、远程port

TCP 的包是不包含 IP 地址信息的,那是 IP 层上的事,但是有源端口和目的端口。
就是说,端口这一东西,是属于 TCP 知识范畴的。

我们知道两个进程,在计算机内部进行通信,可以有管道、内存共享、信号量、消息队列等方法。
而两个进程如果需要进行通讯最基本的一个前提是能够唯一的标识一个进程,在本地进程通讯中我们可以使用 「PID(进程标识符)」 来唯一标识一个进程。
但 PID 只在本地唯一,如果把两个进程放到了不同的两台计算机,然后他们要通信的话,PID 就不够用了,这样就需要另外一种手段了。

解决这个问题的方法就是在运输层使用 「协议端口号 (protocol port number)」 ,简称 「端口 (port)」
我们知道 IP 层的 ip 地址可以唯一标识主机,而 TCP 层协议和端口号可以唯一标识主机的一个进程,这样我们可以利用: 「ip地址+协议+端口号」 唯一标示网络中的一个进程。
在一些场合,也把这种唯一标识的模式称为 「套接字 (Socket)」

取值范围:49152 ~ 65535。
这类端口仅在客户端进程运行时才动态选择。
又叫 短暂端口号,表示这种端口的存在时间是短暂的,客户进程并不在意 *** 作系统给它分配的是哪一个端口号,因为客户进程之所以必须有一个端口号,是为了让传输层的实体能够找到自己。

理解:描述符就类似于Java中的引用变量,而 *** 作系统中的C语言并没有面向对象,没有引用变量和对象之说,因此需要用描述符来指向之前创建的Socket数据结构,来 *** 纵它完成网络 *** 作。

如果说描述符是用来在一台计算机内部识别套接字的机制,那么端口号就是用来让通信的另一方能够识别出套接字的机制 。

Socket啊 很久没碰过了
楼主应该看看Socket的基本概念:
QQ以前是这样的,第一次通信的时候是从服务器去做中间转接的,但后面的通话应该是不经过服务器的。
聊天工具应该是即带有服务端的功能(监听对应的端口,不用IP哦,应该服务端的IP就是你自己网卡的IP嘛,还需要绑定啥,不是多此一举么java也是一样的,服务端只需绑定端口就可以了)
同时聊天工具也是一个客户端,因为你必须要把信息发送到对方那里去,这里你就需要知道对方的IP和端口了。
你这个程序应该带有几个功能:
1广播
2客户端
3服务端
就像飞秋那样子
还有就是建议你先看看Socket编程的书,用不了多久时间的,总比在这SB等人答你问题好啊,知识还是要靠自己

这个是可以的:
如果是UDP协议,那很简单,协议本省就是那样的,因为UDP不建立连接,它只管数据的收发
如果是TCP的话,按协议的初衷,是不可以的,但是可以伪造数据报来进行欺骗,这涉及的内容就比较多了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10585676.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存