我在写一个SERVER端的测试程序了,非常简单的,其中: //使用端口号5050来命名服务器的Sockets
server.sin_family=AF_INET;
server.sin_port=htons(5050);
server.sin_addr.S_un.S_un_b.s_b1=202;
server.sin_addr.S_un.S_un_b.s_b2=115;
server.sin_addr.S_un.S_un_b.s_b3=111;
server.sin_addr.S_un.S_un_b.s_b4=222; if ( bind(socketid, (sockaddr *)&server,sizeof(server))<0)
{
perror("there is error in binding sockets\n");
return 3;
}结果程序输出就是:there is error in binding sockets是不是我的IP有错误?! 可是我在TCP、IP属性里面设定的是:202.115.111.222 呀,会是哪里的错误呢?! 拜托各位讲给我解决办法。 :) 谢谢!
server.sin_family=AF_INET;
server.sin_port=htons(5050);
server.sin_addr.S_un.S_un_b.s_b1=202;
server.sin_addr.S_un.S_un_b.s_b2=115;
server.sin_addr.S_un.S_un_b.s_b3=111;
server.sin_addr.S_un.S_un_b.s_b4=222; if ( bind(socketid, (sockaddr *)&server,sizeof(server))<0)
{
perror("there is error in binding sockets\n");
return 3;
}结果程序输出就是:there is error in binding sockets是不是我的IP有错误?! 可是我在TCP、IP属性里面设定的是:202.115.111.222 呀,会是哪里的错误呢?! 拜托各位讲给我解决办法。 :) 谢谢!
server.sin_addr.S_un.S_un_b.s_b2=115;
server.sin_addr.S_un.S_un_b.s_b3=111;
server.sin_addr.S_un.S_un_b.s_b4=222;
改成
server_addr.sin_addr.S_un.S_addr=INADDR_ANY;
试一试
//使用端口号5050来命名服务器的Sockets
server.sin_family=AF_INET;
server.sin_port=htons(5050); server_addr.sin_addr.S_un.S_addr=INADDR_ANY;编译的时候出现了如下错误:e:\My Documents\简单server\server.cpp(56) : error C2065: 'server_addr' : undeclared identifiere:\My Documents\简单server\server.cpp(56) : error C2228: left of '.sin_addr' must have class/struct/union typee:\My Documents\简单server\server.cpp(56) : error C2228: left of '.S_un' must have class/struct/union typee:\My Documents\简单server\server.cpp(56) : error C2228: left of '.S_addr' must have class/struct/union typee:\My Documents\简单server\server.cpp(89) : warning C4806: '==' : unsafe operation: no value of type 'bool' promoted to type 'const int' can equal the given constantError executing cl.exe.server.exe - 4 error(s), 1 warning(s)
我再好好看看~ :) 麻烦各位老师也帮忙指出错误的修改方法;
表示自动填入本机IP地址,在winsock2.h中声明如下:
#define INADDR_ANY (u_long)0x00000000
#include<iostream.h>
#include<Winsock2.h>
#include<stdio.h>void main()
{
SOCKET socketid;
struct sockaddr_in server_addr;
SOCKET msgsocket;
char buffer[1024];
int rval;
int i; WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested=MAKEWORD(1,1);
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
perror("there is no DLL to use");
return;
} if((LOBYTE(wsaData.wVersion)!=1) || (HIBYTE(wsaData.wVersion)!=1))
{
perror("there is not right DLL");
WSACleanup();
return;
} socketid=socket(AF_INET, SOCK_STREAM, 0);
if(socketid==INVALID_SOCKET)
{
perror("there is error in opening sockets\n");
return;
} server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(5050);
server_addr.sin_addr.S_un.S_addr=INADDR_ANY;
if(bind(socketid,(sockaddr*)&server_addr,sizeof(server_addr))<0)
{
perror("there is error in binding sockets\n");
return;
} int length=sizeof(server_addr);
if(getsockname(socketid,(struct sockaddr *)&server_addr,&length)<0)
{
perror("there is error in getting name");
return;
}
printf("socket port %d\n",ntohs(server_addr.sin_port));
listen(socketid,2); do
{
msgsocket=accept(socketid,(struct sockaddr*)&server_addr,&length);
if(msgsocket==INVALID_SOCKET)
{
perror("there is error in open new sockets");
break;
}
else do
{
memset(buffer,0,sizeof(buffer));
rval=recv(msgsocket,buffer,1024,0);
if(rval<0)
{
perror("there is error in recving");
break;
}
if(rval==0)
{ break;
}
else
{
if(buffer[0]=='q' || buffer[0]=='Q')
{
closesocket(socketid);
WSACleanup();
return;
}
//cout<<"-->"<<buffer<<endl; printf("%s\n",buffer); for(i=0;i<1024;i++)
{
if(islower(buffer[i]))
buffer[i]=buffer[i]-32;
else if(isupper(buffer[i]))
buffer[i]=buffer[i]+32;
}
if((send(msgsocket,buffer,sizeof(buffer),0))<0)
{
perror("there is error in echoing the data");
break;
} else
{
cout<<"Echoing successfully."<<endl;
}
}
}while(rval!=0);
closesocket(msgsocket);
}while(TRUE);
}
它的用法是 Client +主机名 +端口号我这样运行它: Client lee 5050
运行结果: Success send message!可是服务器端的程序也按这个IP怎么会出现错误? 怎么回事呢?