accept()得到的客户端socket信息,为什么Port是个随机的数?
时间:2010-09-20
来源:互联网
我写了一个简单的服务器程序,监听客户端的连接。打印出客户端socket的信息,发现sin_port是个不确定的数字。这是为什么? 我的客户端的代码是指定了连接端口的。
服务器端的运行结果是这样的。第3个数字56603,56604....是打印的客户端socket的信息(port)---这个为什么不是一个固定的呢? 我在代码里面已经指定了服务器端在1234端口监听。还请高人指点一下!
./s
accept success :4,2,56603,127.0.0.1
accept success :4,2,56604,127.0.0.1
accept success :4,2,56605,127.0.0.1
服务器端源代码
复制代码
服务器端的运行结果是这样的。第3个数字56603,56604....是打印的客户端socket的信息(port)---这个为什么不是一个固定的呢? 我在代码里面已经指定了服务器端在1234端口监听。还请高人指点一下!
./s
accept success :4,2,56603,127.0.0.1
accept success :4,2,56604,127.0.0.1
accept success :4,2,56605,127.0.0.1
服务器端源代码
- #include<sys/types.h>
- #include<sys/socket.h>
- #include<sys/wait.h>
- #include<netinet/in.h>
- #include<arpa/inet.h>
- #include<stdio.h>
- #include<stdlib.h>
- #include<errno.h>
- #include<unistd.h>
- #include<string.h>
- int main(void){
- int sock=socket(AF_INET,SOCK_STREAM,0);
- sockaddr_in si,sc;
- bzero((char*)&si,sizeof(si));
- bzero((char*)&sc,sizeof(si));
- si.sin_family=AF_INET;
- si.sin_port=htons(1234);
- si.sin_addr.s_addr=/*htonl(INADDR_ANY);*/inet_addr("127.0.0.1");
- bind(sock,(sockaddr*)&si,sizeof(sockaddr));
- listen(sock,2);
- int fd;
- socklen_t slen=sizeof(sockaddr);
- while(fd){
- fd=accept(sock,(sockaddr*)&sc,&slen);
- if(fd>=0){
- in_addr ad={sc.sin_addr.s_addr};
- printf("accept success :%d,%d,%d,%s\n",
- fd,sc.sin_family,ntohs(sc.sin_port),inet_ntoa(ad));
- write(fd,"server response\n",15);
- close(fd);
- }else{
- printf("accept error %m,%d\n",errno);
- }
- }
- close(sock);
- return 0;
- }
作者: kgisme170 发布时间: 2010-09-20
>>我的客户端的代码是指定了连接端口的。
你指定的端口是服务器端的呀。
客户端的端口你指定了?
你指定的端口是服务器端的呀。
客户端的端口你指定了?
作者: lenovo 发布时间: 2010-09-20
你客户端没bind就connect了吧,这样系统随便给你绑一个IP和端口
作者: liwangli1983 发布时间: 2010-09-20
QUOTE:
我写了一个简单的服务器程序,监听客户端的连接。打印出客户端socket的信息,发现sin_port是个不确定的数字 ...
kgisme170 发表于 2010-09-20 23:40
kgisme170 发表于 2010-09-20 23:40
服务端只能决定服务方的侦听端口,无法决定客户端的端口。客户端程序如果没有在connect前bind固定端口的话,则其端口是按顺序往下分配的可用端口,与服务端的程序没有半点关系,这是基本常识啊。
作者: CountOnMyself 发布时间: 2010-09-20
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28