请问一个socket的问题?
服务端:
- C/C++ code
WSADATA wsa; ::WSAStartup(0x1010,&wsa); SOCKET m_server=::socket(AF_INET, SOCK_STREAM, 0); sockaddr_in sockin; sockin.sin_family=AF_INET; sockin.sin_port=::htons(6090); sockin.sin_addr.S_un.S_addr=htons(INADDR_ANY); bind(m_server,(sockaddr*)&sockin,sizeof(sockaddr_in)); listen(m_server,20); while (true) { sockaddr_in sock_addr; int length=sizeof(sock_addr); SOCKET client=::accept(m_server,(sockaddr*)&sock_addr,&length); std::cout<<sock_addr.sin_addr.S_un.S_addr<<std::endl; }
客户端:
- C/C++ code
WSADATA wsa; ::WSAStartup(0x1010,&wsa); SOCKET client; client=::socket(AF_INET,SOCK_STREAM, IPPROTO_TCP); sockaddr_in sockin; sockin.sin_family=AF_INET; sockin.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); sockin.sin_port=htons(6090); int ret=::connect(client,(LPSOCKADDR)&sockin,sizeof(sockaddr_in)); if (SOCKET_ERROR==ret) { cout<<"连接服务器失败"<<endl; ::WSACleanup(); } char buf[1024]="10000"; ret=::send(client,buf,sizeof(buf),0); if (SOCKET_ERROR==ret) { cout<<"失败"<<endl; } sleep(2000); char buf1[1024]="2000"; ret=::send(client,buf,sizeof(buf1),0); if (SOCKET_ERROR==ret) { cout<<"失败"<<endl; }
运行客户端后,为什么服务端--std::cout<<sock_addr.sin_addr.S_un.S_addr<<std::endl只打印一次尼?有人知道是什么回事吗?那如果我要可以打印两次数据,怎么做呀?
[解决办法]
你要几次,谁控制啊,两次和三次有什么不同啊,先把规则搞清楚
[解决办法]
因为你只运行了一次,当然只执行一次啊!
这里的
while (true)
{
}
只是为了等待客户端连接是否到来而做的一个无限等待,并不是无限循环输出的意思
如果你想要一直输出,那么必须数据保证一直在发送才行,你的客户端里的数据只发送(send)了一次,怎么可能接收数次呢!
楼主可以在你的客户端里面设置一个while循环,无限send数据,这样接收端才能保证获取无限次,才能得到你想要的结果!
[解决办法]
accept 返回一个已完成的连接,和send有什么关系?
可以在accept返回的socket上多次send,recv。
[解决办法]
[解决办法]
[解决办法]
你多运行几个客户端就不是一次了