请问2个进程间通信,服务器和客户端的端口号一定要相同吗??

chenzhg 2007-10-09 04:14:47
如题~~

比如用客户端的800端口能访问服务器的500端口吗?

初学网络编程
...全文
5630 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangext520 2012-06-06
  • 打赏
  • 举报
回复
也有个类似的问题就是第一次给服务器发数据的时候IP和端口都是0然后以后的都正常了。。这是为什么呢。。
混少年 2012-03-25
  • 打赏
  • 举报
回复 1
茅舍顿开啊谢谢各位前辈
yueshenfeng 2009-01-17
  • 打赏
  • 举报
回复
那请问有没有简单一点的例子啊?
znsky 2008-07-17
  • 打赏
  • 举报
回复
俺也正遇到了这方面的疑问
学到了很多东西,谢谢各位前辈
neversaydie518 2007-10-13
  • 打赏
  • 举报
回复
显然你每个进程accept后生成套接字是不同的吧
yaozijian110 2007-10-12
  • 打赏
  • 举报
回复 3

服务器和客户端都有端口号,但是,服务器的端口号是重要的,因为客户端只有了解了服务器的地址和端口号,才可以连接到它(即使是采用UDP传输数据,也需要指定发送目标的地址和端口号);而客户端的端口号是无关紧要的,一般由操作系统自动分配。

服务端怎么知道和客户端的哪个进程连接???
---------------------------------------------------------
对于TCP,服务器在客户端连接后,会在监听套接字之外另外生成一个新的套接字,表示与客户端的连接,这个套接字了解客户端的地址和端口号,从而可以区分是哪个客户端;
对于UDP,服务器在收到UDP数据时,也了解数据来自什么地址和端口,也可以区分是哪个客户端。

从基本的网络概念来说,网络层(IP)负责两个主机间的通信,用IP地址区分主机;传输层(TCP和UDP)处理两个进程间(可以是在同一台机器中的两个进程,也可以是不同主机中的两个进程)的通信,用端口号区分进程。两者合起来就是,用 IP地址+传输层协议+端口号 来区分与谁进行通信。(传输层协议就是指TCP或者UDP,也可以是别的传输层协议,因为互联网协议栈是个开放的结构,其他传输层协议也可以利用IP作为网络层提供的服务)

TurkeyCock 2007-10-11
  • 打赏
  • 举报
回复
如果用的是UDP协议,服务器在接受数据的时候就可以得到客户端的IP和端口(recvfrom方法里有个参数),只要客户端socket不关闭,服务器给这个端口发送数据就可以拉~
int recvfrom(
SOCKET s,
char FAR* buf,
int len,
int flags,
struct sockaddr FAR *from, //客户端信息
int FAR *fromlen
);
如果用的是TCP协议,就必须在客户端也侦听一个端口了~
huanjieshuijing 2007-10-11
  • 打赏
  • 举报
回复
不需要,
服务端怎么知道和客户端的哪个进程连接???
好象SOCKET编程里不用设置客户端的端口号啊

对于客户端来说,当它发起连接请求,在服务器段就保存了客户端的IP地址和客户端的信息,这样对于服务器来说,一旦连接建立以后,实际上它就已经保存了客户端的IP地址和端口号的信息,就可以利用套接字调用send/recv函数与客户端进行通信
chenzhg 2007-10-10
  • 打赏
  • 举报
回复
回楼上

我的意思是,服务器必须指定端口这可以理解,比如我们架设tomcat和iis的WEB服务器,分别设置8080和80,这2个进程同样作为服务器是互不干扰的.

我的问题是:

如果我在同一个IP地址的机器上启动2个浏览器(2个客户端进程),
这里客户端并没有绑定自己的端口,
那么当连接服务器后,(注:服务器并不知道和哪个进程连接,因为端口没有绑定!)

服务器要给我的机器发送信息,就不知道给哪个进程发了,那么A浏览器里就有可能显示B的内容吗?????

另外:我想请教,在windows下的网络编程中,端口号和进程是唯一确定的吗?
star119119 2007-10-10
  • 打赏
  • 举报
回复
客戶端 你不設定的話 就是隨即分配的,你設定了就是 用你設定那個。
henanlsl 2007-10-10
  • 打赏
  • 举报
回复
端口两者都要用,只是客户的常省.有时不能省,看情况.
WizardK 2007-10-09
  • 打赏
  • 举报
回复 1
能,服务器端的端口号和客户端的端口号没有关系

一般服务器是需要BIND指定端口号的,客户端可以BIND也可以不BIND(BIND后关闭SOCKET需要一段时间由系统释放这个端口,所以客户端一般不BIND)

另外,你这个进程间通讯是什么意思?
第1季 2007-10-09
  • 打赏
  • 举报
回复
服务器端需要指定端口,只有这样客户端才知道确定连接那个端口。 而客户端连接服务器程序后占用的端口,默认是由系统自动分配的系统中可用的端口,(这个端口号码,可以通过服务端调用accept函数得到)


服务器端(端口8000) - 客户端1(X)
- 客户端2(XX)
- 客户端3(XXX)
- ......

我们可以不用去管他
wltg2001 2007-10-09
  • 打赏
  • 举报
回复
端口号好像是对服务器端而言的吧,客户端也要吗?
chenzhg 2007-10-09
  • 打赏
  • 举报
回复
服务端怎么知道和客户端的哪个进程连接???
好象SOCKET编程里不用设置客户端的端口号啊

18,364

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧