socket编程大家都很熟悉,我在这里就不再罗嗦了。直接切入正题。该程序分两部分,server端和client端(谁都知道)。其中server端采用windows平台,那linux平台当然是client端了。 这里是server端程序: /**********************************/ /* it worked as server under windows platform */ /* written by mlsx 1998-2-7 */ /************************************/
include <windows.h> #include <stdio.h> #pragma comment (lib,"WS2_32.lib") #define USERPORT 10001 #define HOST_IP_ADDR "127.0.0.1"
main(int argc,char *argv[]) { char buf[128]; SOCKET s,ns; struct sockaddr_in client; struct sockaddr_in server; int namelen,pklen; int status; WSADATA wsd; if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0) { perror("wsastartup() failed:"); exit(1); } if((s=socket(AF_INET,SOCK_STREAM,0))< 0) { perror("socket failed :"); exit(1); } ZeroMemory(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(USERPORT); server.sin_addr.s_addr=htons(INADDR_ANY); if(bind(s,(struct sockaddr *)&server,sizeof(server))<0) { perror("bind() failed:"); exit(2); } if(listen(s,4)!=0) { perror("listen()failed :"); exit(3); } while(1) { namelen=sizeof(client); if((ns=accept(s,(struct sockaddr*)&client,&namelen))==-1) { perror("accept()failed:"); exit(4); } printf("accept successful"); for(;;) { if((pklen=recv(ns,buf,128,0))<0) { perror("recv() failed:"); exit(5); } else if(pklen==0) { printf("recv():return FAILED,connected is shut down"); break; } else printf("recv():return success,packet length=%d context is %s\n",pklen,buf); Sleep(1); //printf("the buf is %s\n",buf); if(send(ns,buf,128,0)<0) { perror("send() failed:"); break; } else printf("send() return success packet length is %d\n",pklen); } } closesocket(ns); closesocket(s); printf("server ended successfully\n"); }
这里是client端程序:
/**********************************/ /* it worked as client under linux platform */ /* written by mlsx 1998-2-7 */ /************************************/ #include <windows.h> //#include <winsock2.h> #include <stdio.h> #pragma comment (lib,"WS2_32.lib") #define USERPORT 5003 main(int argc,char *argv[]) { char buf[128]; SOCKET sclient; struct sockaddr_in server; int namelen,pklen; int status,ret; char szmessage[128]; WSADATA wsd; if(argc<2) { printf("usage:\n"); printf("%s ipaddr",__FILE__); printf("ipaddr is the server's ip address,like xxx.xxx.xxx.xxx\n"); exit(1); } if((status=WSAStartup(MAKEWORD(2,2),&wsd))!=0) { perror("wsastartup() failed:"); exit(1); } if((sclient=socket(AF_INET,SOCK_STREAM,0))< 0) { perror("socket failed :"); exit(1); } ZeroMemory(&server,sizeof(server)); ZeroMemory(szmessage,sizeof(szmessage)); server.sin_family=AF_INET; server.sin_port=htons(USERPORT); server.sin_addr.s_addr=inet_addr(argv[1]); if(connect(sclient,(struct sockaddr *)&server,sizeof(server))<0) { perror("connect() failed :"); printf("%d",WSAGetLastError()); exit(3); } namelen=sizeof(sclient); /*for(ret=0;ret<10;ret++) { if(send(sclient,szmessage,sizeof(szmessage),0)<0) { perror("send() failed:"); break; } printf("send() return success\n context is %s \n",szmessage); if((pklen=recv(sclient,buf,sizeof(buf),0))<0) { perror("recv() failed:"); exit(5); } else if(pklen==0) { printf("recv():return FAILED,connected is shut down"); break; } else { printf("the pktlen is %d\n",pklen); buf[pklen]='\0'; printf("recv():return success\npacket length=%d and the context is %s\n",pklen,buf); ZeroMemory(buf,sizeof(buf)); } Sleep(10); }*/ //while(strcmp(szmessage,"q")) while(1) { ZeroMemory(szmessage,sizeof(szmessage)); //scanf("%s",szmessage); //puts(szmessage); //gets(szmessage); //send(sclient,szmessage,sizeof(szmessage),0); //Sleep(10); ZeroMemory(buf,sizeof(buf)); ret=recv(sclient,buf,sizeof(buf),0); buf[ret]='\0'; //printf("%s the length is %d ",buf,ret); puts(buf); Sleep(1); } closesocket(sclient); WSACleanup(); printf("server ended successfully\n"); return 0; } |