UDP 编写
server.c
#include<stdio.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<netinet/in.h> void Usage(char* prc) { printf("Usage: %s [local ip][local port]",prc); } int main(int argc,char* argv[]) { if(argc!=3) { Usage(argv[0]); return 1; } //sock int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { perror("sock"); return 2; } struct sockaddr_in local; local.sin_family=AF_INET; local.sin_port=htons(atoi(argv[2])); local.sin_addr.s_addr=inet_addr(argv[1]); // if(bind(sock,(struct sockaddr*)&local,sizeof(local))<0) { perror("bind"); return 3; } char buf[1024]; struct sockaddr_in client_socket; while(1) { socklen_t len=sizeof(client_socket); size_t s=recvfrom(sock,buf,sizeof(buf)-1,0,(struct sockaddr*)&client_socket,&len); if(s>0) { buf[s]=0; printf("[%s][%d]:%s\n",inet_ntoa(client_socket.sin_addr),ntohs(client_socket.sin_port),buf); //write ssize_t _s=sendto(sock,buf,strlen(buf),0,(struct sockaddr *)&client_socket,sizeof(client_socket)); if(_s<0) { perror("sendto"); } } } return 0; }cllient.c
#include<stdio.h> #include<string.h> #include<sys/socket.h> #include<sys/types.h> #include<arpa/inet.h> #include<netinet/in.h> void Usage(char* prc) { printf("Usage: %s [server ip][local port]",prc); } int main(int argc,char* argv[]) { if(argc!=3) { Usage(argv[0]); return 1; } //sock int sock=socket(AF_INET,SOCK_DGRAM,0); if(sock<0) { perror("sock"); return 2; } struct sockaddr_in server; server.sin_family=AF_INET; server.sin_port=htons(atoi(argv[2])); server.sin_addr.s_addr=inet_addr(argv[1]); //无连接 char buf[1024]; while(1) { printf("Please Enter:"); fflush(stdout); ssize_t s=read(0,buf,sizeof(buf)); if(s>0) { buf[s-1]=0; ssize_t _s=sendto(sock,buf,strlen(buf),0,(struct sockaddr *)&server,sizeof(server)); if(_s<0) { perror("sendto"); } ssize_t s=recvfrom(sock,buf,sizeof(buf)-1,0,0,0); if(s>0) { buf[s]=0; printf("server echo:%s\n",buf); } } } return 0; }TCP 编写
int main(int argc,char* argv[]) { if(argc!=3) { printf("Usage:%s [service ip][service port]\n",argv[0]); return 1; } int sock=socket(AF_INET,SOCK_STREAM,0); //create ipv4 socket struct sockaddr_in server_socket; struct sockaddr_in client_socket; bzero(&server_socket,sizeof(server_socket)); //fill addr port server_socket.sin_family=AF_INET; server_socket.sin_addr.s_addr=inet_addr(argv[1]); server_socket.sin_port=htons(atoi(argv[2])); if(bind(sock,(struct sockaddr*)&server_socket,sizeof(struct sockaddr_in))<0) { perror("bind"); close(sock); return 1; } int new_sock=accept(sock,(struct sockaddr*)&client_socket,&len); //return fd if(new_sock<0) { //perror("accept "); continue; } while(1) { ssize_t s=read(new_sock,buf,sizeof(buf)); if(s>0) { buf[s]=0; printf("Client #:%s\n",buf); write(new_sock,buf,strlen(buf)); }else if(s==0) { printf("client quit!\n"); break; } else { perror("read"); } } close(new_sock); } return 0; }