这个程序需要改哪些地方才能在windosXP下编译通过
这是客服端:
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include <winsock2.h>
#define portnumber 3333
int main(int argc,char **argv)
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
struct hostent *host;
int sin_size,nbytes;
char buffer[1024];
if(argc!=2) {
printf("Usage:%s\n");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) {
fprintf(stderr,"socket error\n",strerror(errno));
exit(1);
}
bzero(&server_addr ,sizeof ( server_addr));
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(portnumber);
inet_pton(AF_INET, argv[1], &server_addr.sin_addr);
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr ))==-1) {
fprintf(stderr,"connect error\n",strerror(errno));
exit(1);
}
printf("please input message \n");
fgets(buffer,1024,stdin);
write(sockfd,buffer,strlen(buffer));
close(sockfd);
}
这是服务端:
#include<stdio.h>
#include<errno.h>
#include<sys/types.h>
#include<stdlib.h>
#include<string.h>
#include<netinet/in.h>
#include<sys/socket.h>
#define portnumber 3333
int main(int argc,char **argv)
{
int err,sd,new_sd,connect_sd,s_bind,s_listen;
int sin_size,nbytes;
char s_buffer[1024];
struct sockaddr_in server_addr,client_addr;
struct hostent *host;
sd=socket(AF_INET,SOCK_STREAM,0);
if(sd==-1) {
fprintf(stderr,"socket error\n",strerror(errno));
exit(1);
}
bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);
s_bind=bind(sd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr));
if(s_bind==-1) {
fprintf(stderr,"bind error:\n",strerror(errno));
exit(1);
}
s_listen=listen(sd,5);
if(s_listen) {
fprintf(stderr,"listen error:\n",strerror(errno));
exit(1);
}
while(1) {
sin_size=sizeof(struct sockaddr);
new_sd=accept(sd,(struct sockaddr *)(&client_addr),&sin_size);
if(new_sd==-1) {
fprintf(stderr,"accept error :\n",strerror(errno));
exit(1);
}
nbytes=read(new_sd,s_buffer,10);
if(nbytes==-1) {
fprintf(stderr,"read error\n",strerror(errno));
exit(1);
}
s_buffer[nbytes]='\0';
printf("recive:%s",s_buffer);
close(new_sd);
}
close(sd);
return 0;
}
[解决办法]
你的程序最好在linux下运行吧。比如inet_pton函数在XP下是没有的,需要自己编写的。MSDNhttp://msdn.microsoft.com/en-us/library/cc805844(VS.85).aspx