求高手!!!
小弟初学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端口是没被占用的,运行服务器程序后,再次检查端口,端口正常被我的服务器程序所占用了
生成服务器程序运行后就出现了
生成客户端程序运行后就出现了
求个各位高手帮忙啊!小弟感激不尽啊!!!这对于高手来说是很简单的问题,但确实是很蛋疼的问题啊!!!拜托了各位!!!