菜鸟初学C++网络编程,用bind绑定套接字一直失败!急急急!!!

gp19920211 2013-05-22 08:44:38
求高手!!!
小弟初学c++的网络编程,在VS2008下面写了简单的服务器/客户端的单机测试程序,用127.0.0.1回路地址测试,但在服务器端的程序里面,绑定套接字时一直绑定失败!!!求解啊!!!
注:我的两个工程都放在同一个工作空间中的。

代码:

//服务器端
#include <winsock2.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2,2);
err = WSAStartup( wVersionRequested, &wsaData );

//#define WSASYSNOTREADY 10091L // 数字后面的L表示long型
//#define WSAVERNOTSUPPORTED 10092L

if ( err != 0 ) //if(WSASYSNOTREADY == err)
{
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) //判断你的应用程序是否使用你所请求的1.1版本,不是则释放winscokDLL
{ //LOBYTE()取低字节,HIBYTE()取低字节
WSACleanup( );
return;
}

SOCKET sever_socket;

if(sever_socket=socket(AF_INET,SOCK_STREAM,0)==INVALID_SOCKET)
{
cout<<"创建失败!!!"<<endl;

}
else sever_socket=socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN sesock_addinf;
//struct sockaddr_in sesock_addinf;
//memset(&sesock_addinf,0,sizeof(sockaddr_in));

sesock_addinf.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//inet_addr("192.168.1.1");
sesock_addinf.sin_family = AF_INET;
sesock_addinf.sin_port = htons(5111);

if(bind(sever_socket,(SOCKADDR*)&sesock_addinf,sizeof(sesock_addinf)) == SOCKET_ERROR)
{
cout<<"绑定失败!!!"<<endl;
return;
}

listen(sever_socket,2);//第二个参数为最大等待连接数

SOCKADDR_IN sesock_customer;
int lent = sizeof(SOCKADDR);

//while(1)
//{
for(int i=0;i<5;i++)
{
SOCKET sever_accept = accept(sever_socket,(SOCKADDR*)&sesock_customer,&lent);

char sendstring[100];
sprintf_s(sendstring,"welcom %s to anyone",inet_ntoa(sesock_customer.sin_addr));
send(sever_accept,sendstring,strlen(sendstring)+1,0);

char recvstring[100];
recv(sever_accept,recvstring,100,0);
printf("%s\n",recvstring);
closesocket(sever_accept);

}//}
closesocket(sever_socket);
WSACleanup();

}

//客户端
#include <winsock2.h>
#include <stdio.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib")
using namespace std;

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2,2);
err = WSAStartup( wVersionRequested, &wsaData );

//#define WSASYSNOTREADY 10091L // 数字后面的L表示long型
//#define WSAVERNOTSUPPORTED 10092L

if ( err != 0 ) //if(WSASYSNOTREADY == err)
{
return;
}

if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 2 ) //判断你的应用程序是否使用你所请求的2.2版本,不是则释放winscokDLL
{

//LOBYTE()取低字节,HIBYTE()取低字节
WSACleanup( );
return;
}

SOCKET customer_sock = socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN customer_addinf;
customer_addinf.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
customer_addinf.sin_family = AF_INET;
customer_addinf.sin_port = htons(5111);

if(::connect(customer_sock,(SOCKADDR*)&customer_addinf,sizeof(SOCKADDR))==SOCKET_ERROR)
{

cout<<"连接服务器失败!!!"<<endl;

//printf("连接服务器失败");
return;
}

char recvsrting[100];
recv(customer_sock,recvsrting,100,0);
printf("%s\n",recvsrting);

send(customer_sock,"this is cgp",strlen("this is cgp")+1,0);
closesocket(customer_sock);
WSACleanup();

}


运行前我在doc下检查了5111端口是没被占用的,运行服务器程序后,再次检查端口,端口正常被我的服务器程序所占用了



生成服务器程序运行后就出现了


生成客户端程序运行后就出现了


求个各位高手帮忙啊!小弟感激不尽啊!!!这对于高手来说是很简单的问题,但确实是很蛋疼的问题啊!!!拜托了各位!!!





...全文
1015 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
gp19920211 2013-05-23
  • 打赏
  • 举报
回复
哈哈,辛苦了,同志,向你致敬!!!
  • 打赏
  • 举报
回复
引用 3 楼 gp19920211 的回复:
谢谢两位啦。。。你们讲得都对。。。只是我是自己犯了一个低级的错误,我把两个工程放到同一个工作空间里面了,然后由于VS2008相对VC6.0不同,它不可以选择异步运行两个工程,(如果可以的话应该是我还不知道,所以别见笑),所以我一直都在运行服务器程序而没有运行客户端程序,所以就一直报错了。。。自己笨了点,呵呵。。。不过还是灰常感谢你们。
楼主,你赢了。。。 害的我把程序看了半天。。。x
gp19920211 2013-05-22
  • 打赏
  • 举报
回复
谢谢两位啦。。。你们讲得都对。。。只是我是自己犯了一个低级的错误,我把两个工程放到同一个工作空间里面了,然后由于VS2008相对VC6.0不同,它不可以选择异步运行两个工程,(如果可以的话应该是我还不知道,所以别见笑),所以我一直都在运行服务器程序而没有运行客户端程序,所以就一直报错了。。。自己笨了点,呵呵。。。不过还是灰常感谢你们。
max_min_ 2013-05-22
  • 打赏
  • 举报
回复
setsockopt 设置下 地址重用试试
youyou1912 2013-05-22
  • 打赏
  • 举报
回复
netstat -abn 看下端口5111是不是被占用了? 是的话, 换个端口, 或者用SO_REUSEADDR重用端口, 或者等2分钟

65,199

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧