首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请教一个socket的有关问题

2012-05-27 
请问一个socket的问题?服务端:C/C++ codeWSADATA wsa::WSAStartup(0x1010,&wsa)SOCKET m_server::socke

请问一个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。
[解决办法]
探讨

引用:
因为你只运行了一次,当然只执行一次啊!
这里的
while (true)
{
}
只是为了等待客户端连接是否到来而做的一个无限等待,并不是无限循环输出的意思

如果你想要一直输出,那么必须数据保证一直在发送才行,你的客户端里的数据只发送(send)了一次,怎么可能接收数次呢!

楼主可以在你的客户端里面设置一个while循环,无限s……

[解决办法]
探讨
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;
}
我不是发送了两次吗??

[解决办法]
你多运行几个客户端就不是一次了

热点排行