logo资料库

Linux网络编程 Socket UDP形式(包括服务器端和接收端).doc

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
【服务器程序和注释】 #include #include #include #include #include #include #include #include #define MYPORT 3490 #define BACKLOG 10 main() { //设定端口为 3490 int sockfd,new_fd; struct sockaddr_in my_addr; struct sockaddr_in their_addr; int sin_size; if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { exit(1); perror("socket"); } //服务器网络地址结构体 //客户端网络地址结构体 my_addr.sin_family=AF_INET; my_addr.sin_port=htons(MYPORT); my_addr.sin_addr.s_addr=INADDR_ANY; //设置为 IP 通信 //服务器端口号 //服务器 IP 地址--允许连接到所有 本地地址上 bzero(&(my_addr.sin_zero),8); //置零 perror("bind"); if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1) { exit(1); if(listen(sockfd,BACKLOG)==-1){perror("listen");exit(1);} } sin_size=sizeof(struct sockaddr_in); while(1) { if((new_fd=accept(sockfd,(struct sockaddr*)&their_addr,&sin_size))==-1) //这里使用的函数是阻塞型的,没有连接时程序不会继续运行 {perror("accept");continue;} printf("server:got connection from %s\n", inet_ntoa(their_addr.sin_addr)); if(!fork()) //转化 IP 地址并输出 {if(send(new_fd,"This is my First Program in lunix!\n zhu hao\n",53,0)==-1)perror("send"); //传送数据信息 close(new_fd); exit(0); } 1 / 3
close(new_fd); } } 【客户端程序及注释】 #include #include #include #include #include #include #include #include #define PORT 3490 #define MAXDATASIZE 100 int main(int argc, char *argv[]) { int sockfd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struct sockaddr_in their_addr; // Server 的端口 //一次可以读的最大字节数 //提取输入的主机名称的字符数,并用 //(接上)针数组指向该主机名(IP 地址) // 主机信息 //对方地址信息 //获得主机信息 //如果输入格式不正确,则说明 //用法是输入主机地址 if (argc!=2) { fprintf(stderr,"usage: client hostname\n"); exit(1); } if ((he=gethostbyname(argv[1])) == NULL) { herror("gethostbyname"); exit(1); } if ((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } their_addr.sin_family = AF_INET; their_addr.sin_port = htons(PORT); /* short, NBO */ their_addr.sin_addr = *((struct in_addr *)he->h_addr); bzero(&(their_addr.sin_zero), 8); if(connect(sockfd,(struct sockaddr *)&their_addr, sizeof(struct sockaddr))==-1) //其余部分设成 0 //设置为 IP 通信 //设置服务器端口号 {perror("connect");exit(1);} if((numbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1) //接受数服务器据 2 / 3
{perror("recv"); exit(1);} buf[numbytes] = '\0'; printf("Received: %s",buf); close(sockfd); return 0; } //输出接收到的数据 //结束 3 / 3
分享到:
收藏