Linux下的Socket基础编程(来自Unix网络编程)

来源:互联网 发布:windows 远程连接 mac 编辑:程序博客网 时间:2024/06/06 05:06

1.服务器端:

/* * server.c * *  Created on: Nov 20, 2012 *      Author: gentoo */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/wait.h>#include <netinet/in.h>#include <arpa/inet.h>#include <time.h>#define SERVER_PORT 8999#define BUFFER 1024int main(int argc, char * argv[]) {int listenfd; //用于监听int connfd;   //用于连接struct sockaddr_in seraddr; //socket的地址信息结构体char buff[BUFFER];   //字符串缓冲区time_t ticks;//时间//创建一个监听的socketif ( (listenfd=socket(AF_INET, SOCK_STREAM, 0)) < 0 ){perror("create sock error!\n");exit(1);}//清空地址结构体并设置相应的信息bzero(&seraddr, sizeof(seraddr));seraddr.sin_family = AF_INET;  //使用的协议:TCP/IPseraddr.sin_port = htons(SERVER_PORT); //用于监听的端口seraddr.sin_addr.s_addr = htonl(INADDR_ANY); //服务器端的IP地址,INADDR_ANY表示由系统自动获取//进行绑定if ( bind(listenfd, (struct sockaddr *)&seraddr, sizeof(seraddr))< 0 ){perror("bind sock error!\n");exit(1);}//进行监听if ( (listen(listenfd, 4)) < 0 ){perror("listen error!\n");exit(1);}//等待客户端的请求for( ; ; ){//进行阻塞,直到有一个客户端发起请求connfd = accept(listenfd, NULL, NULL);ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));//向连接中的socket通道写一些字符串write(connfd, buff, strlen(buff));//关闭该次的连接close(connfd);}return EXIT_SUCCESS;}


2.客户端:

/* * Client.c * *  Created on: Nov 20, 2012 *      Author: gentoo */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h>#include <sys/socket.h>#include <sys/wait.h>#include <netinet/in.h>#include <arpa/inet.h>#define BUFFER 1024#define SERVER_PORT 8999int main(int argc, char * argv[]) {//用于连接的socketint sockfd;//读取了多少个字节int readBytes;//信息的接收char recieve[BUFFER+1];//服务器端的地址结构体信息struct sockaddr_in servaddr;if ( argc != 2 ){perror("IP is required!\n");exit(1);}//创建一个socketif ( (sockfd=socket(AF_INET, SOCK_STREAM, 0)) < 0 ){perror("crate socket error!\n");}//清空地址信息结构体并设置相应的信息bzero(&servaddr, sizeof(servaddr));;servaddr.sin_family = AF_INET; //所用的协议servaddr.sin_port = htons(SERVER_PORT); //所要连接到服务器的端口号//将参数argv[1]的字符串转化为IP地址if ( (inet_pton(AF_INET, argv[1], &servaddr.sin_addr)) <= 0 ){perror("IP transform error!\n");exit(1);}//进行连接if ( (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr))) < 0 ){perror("connected error!\n");exit(1);}//读取服务器端发送的信息并将其输出到stdout中while ( (readBytes=read(sockfd, recieve, BUFFER)) > 0 ){recieve[readBytes] = 0;if ( fputs(recieve, stdout) == EOF ){fprintf(stdout, "fputs error!\n");}}if ( readBytes < 0 ){perror("read error!\n");}return EXIT_SUCCESS;}



原创粉丝点击