- 论坛徽章:
- 0
|
socket程序,客户端的端口不能固定吗?
bind(sock,(struct sockaddr *)&server,sizeof(server));?
没有用啊,server里装得是服务器的信息
事情是这样的:
我在客户端每隔5秒执行以下程序:
sock=socket(AF_INET, SOCK_STREAM,0);
server.sin_family=AF_INET;
server.sin_port=htons(atoi(argv[2]));
server.sin_addr.S_un.S_addr=uladdr; //服务器ip地址
connect(sock,(const sockaddr*)&server,sizeof(server))
memset(buf,0,sizeof(buf));
printf("begin to recv\n" ;
rval=recv(sock,buf,1024,0);
closesocket(sock);
在服务器端写
msgsock=accept(sock,(struct sockaddr*)&tcpaddr,(int *)&len)
printf("client ip=%s\n ",inet_ntoa(tcpaddr.sin_addr));
看到客户端系统给客户端分配的端口(tcpaddr.sin_addr)在不停的变化(大概是因为每次连接都新建了一个套接字?),一旦看到客户端系统给客户端分配的端口(tcpaddr.sin_addr)在不停的变化,一旦tcpaddr.sin_addr=1243的时候,客户端的防火墙就会把服务器发来的数据包拦截的,导致通讯中断,把防火墙关掉后客户端才能用这个端口.
请问是不是能够让tcpaddr.sin_addr固定下来?这样是不是就不会出错了?
多谢各位 |
|