window上调试过的网络编程,把注释的一些代码放开并稍加修改可以在linux上用
// networkserver.cpp : Defines the entry point for the console application. // /******* 服务器程序 (server.c) ************/ #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> //#include <unistd.h> //#include <netdb.h> //#include <sys/socket.h> //#include <netinet/in.h> #include <sys/types.h> //#include <arpa/inet.h> #include "stdafx.h" #include< windows.h > #include< winsock.h > #pragma comment( lib, "ws2_32.lib" ) int _tmain(int argc, _TCHAR* argv[]) { int sockfd,new_fd; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int sin_size; int portnumber = 8889; char hello[]="Hello! Are You Fine?\n"; WSADATA WSAData; /* if(argc!=2) { fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); exit(1); } if((portnumber=atoi((const char*)argv[1]))<0) { fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]); exit(1); } */ if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )//初始化 { printf( "initializationing error!\n" ); WSACleanup( ); exit( 0 ); } /* 服务器端开始建立socket描述符 */ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); exit(1); } /* 服务器端填充 sockaddr结构 */ //bzero(&server_addr,sizeof(struct sockaddr_in)); memset(&server_addr,0,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); /* 捆绑sockfd描述符 */ if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) { fprintf(stderr,"Bind error:%s\n\a",strerror(errno)); exit(1); } /* 监听sockfd描述符 */ if(listen(sockfd,5)==-1) { fprintf(stderr,"Listen error:%s\n\a",strerror(errno)); exit(1); } while(1) { /* 服务器阻塞,直到客户程序建立连接 */ sin_size=sizeof(struct sockaddr_in); if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1) { fprintf(stderr,"Accept error:%s\n\a",strerror(errno)); exit(1); } fprintf(stderr,"Server get connection from %s\n", inet_ntoa(client_addr.sin_addr)); //if(write(new_fd,hello,strlen(hello))==-1) if(send( new_fd, hello, strlen( hello ), 0 ) == -1 ) { fprintf(stderr,"Write Error:%s\n",strerror(errno)); exit(1); } /* 这个通讯已经结束 */ //close(new_fd); closesocket(new_fd); /* 循环下一个 */ } //close(sockfd); closesocket(sockfd); exit(0); }
// networkclient.cpp : Defines the entry point for the console application. // /******* 客户端程序 client.c ************/ #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> //#include <unistd.h> //#include <netdb.h> //#include <sys/socket.h> //#include <netinet/in.h> #include <sys/types.h> //#include <arpa/inet.h> #include "stdafx.h" #include< windows.h > #include< winsock.h > #pragma comment( lib, "ws2_32.lib" ) int _tmain(int argc, _TCHAR* argv[]) { int sockfd; char buf[128]; char buffer[1024]; struct sockaddr_in server_addr; struct hostent *host; struct in_addr *a; int portnumber = 8889; int nbytes; char* tmp; WSADATA WSAData; /* if(argc!=3) { fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]); exit(1); } if((host=gethostbyname((const char*)argv[1]))==NULL) { fprintf(stderr,"Gethostname error\n"); exit(1); } if((portnumber=atoi(argv[2]))<0) { fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]); exit(1); } */ if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )//初始化 { printf( "initializationing error!\n" ); WSACleanup( ); exit( 0 ); } if (argc == 1) { printf("host: "); fgets(buf, sizeof(buf), stdin); if ((tmp = strchr(buf, '\n')) != NULL) *tmp = '\0'; host = gethostbyname(buf); } else { host = gethostbyname((const char*)argv[1]); } /* 客户程序开始建立 sockfd描述符 */ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { fprintf(stderr,"Socket Error:%s\a\n",strerror(errno)); exit(1); } /* 客户程序填充服务端的资料 */ //bzero(&server_addr,sizeof(server_addr)); memset(&server_addr,0,sizeof(server_addr)); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(portnumber); server_addr.sin_addr=*((struct in_addr *)host->h_addr); /* 客户程序发起连接请求 */ if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) { fprintf(stderr,"Connect Error:%s\a\n",strerror(errno)); exit(1); } /* 连接成功了 */ //if((nbytes=read(sockfd,buffer,1024))==-1) if((nbytes=recv(sockfd,buffer,1024,0))==-1) { fprintf(stderr,"Read Error:%s\n",strerror(errno)); exit(1); } buffer[nbytes]='\0'; printf("I have received:%s\n",buffer); /* 结束通讯 */ //close(sockfd); closesocket(sockfd); system("pause"); exit(0); }