返回信息流昨天参加了一个面试,面试官问了这样一个问题
加入一个tcp的服务器占用了一个端口,并监听这个端口。那么还可以用这个端口来用作tcp的客户端么?
这是一条镜像帖。来源:北邮人论坛 / soft-design / #22698同步于 2007/12/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
[求助]关于tcp端口的问题,急
hman
2007/12/5镜像同步19 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
不能吧
【 在 hman 的大作中提到: 】
: 昨天参加了一个面试,面试官问了这样一个问题
: 加入一个tcp的服务器占用了一个端口,并监听这个端口。那么还可以用这个端口来用作tcp的客户端么?
tcp要建连接,listen过的socket用来connect就出错了
实验了下,返回EISCONN错误
【 在 hman (Richard) 的大作中提到: 】
: 昨天参加了一个面试,面试官问了这样一个问题
: 加入一个tcp的服务器占用了一个端口,并监听这个端口。那么还可以用这个端口来用作tcp的客户端么?
【 在 Bergwolf 的大作中提到: 】
: tcp要建连接,listen过的socket用来connect就出错了
: 实验了下,返回EISCONN错误
我用这个办法试了。WSAGetLastError返回的错误代码是10022,这个对应的是 WSAEINVAL这个错误。
我的代码如下:
/*bind*/
bind(sockSrv,(SOCKADDR *) &addrSrv,sizeof(SOCKADDR));
/***************************************/
/*监听状态 */
/***************************************/
listen(sockSrv,5);//等待连接队列值5
SOCKADDR_IN addrClient;
addrClient.sin_addr.S_un.S_addr=inet_addr("59.64.180.129");//转换为网络字节序,接收所有地址的连接
addrClient.sin_family=AF_INET;
addrClient.sin_port=htons(6000);//大于1024
int res = connect(sockSrv,(SOCKADDR*)&addrClient,sizeof(SOCKADDR)) ;
printf("connecting %d\n",res);
if (res == SOCKET_ERROR)
res = WSAGetLastError();
printf("wsagetlasterror %d\n",res);