本文共 2649 字,大约阅读时间需要 8 分钟。
服务端程序
#include <stdio.h>
#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <string.h> #include <stdlib.h> #include <arpa/inet.h> #include <netinet/in.h> #include <pthread.h> void *read_func(void *arg) { int fd = *(int *)arg; int ret = -1; char buf[10] = {'\0'}; //读取客户端的信息 ret = read(fd, buf, 6); if(ret < 0){ perror("read"); pthread_exit(NULL); } while(1){ sleep(1); if(strncmp(buf, "hello", 5) == 0){ write(fd, "world", 6); } else{ printf("Is not [hello]\n"); write(fd, "nothe", 6); } } } int main(void) { int fd = -1; int new_fd = -1; int ret = 0; char buf[6]; pthread_t th_id; struct sockaddr_in server_add; //建立Socket连接 fd = socket(AF_INET, SOCK_STREAM, 0); if(fd < 0){ perror("socket"); exit(1); } memset(&server_add, 0, sizeof(server_add)); //设置sockaddr_in结构体中的相关参数 server_add.sin_family = AF_INET; server_add.sin_port = htons(8888); server_add.sin_addr.s_addr = inet_addr("192.168.7.200"); //绑定 ret = bind(fd, (struct sockaddr *)&server_add, sizeof(struct sockaddr)); if(ret < 0){ perror("bind "); exit(1); } //调用listen函数,创建示处理请求的队列 listen(fd, 5); while(1){ //调用accept函数,等待客户端的连接 new_fd = accept(fd, NULL, NULL); if(new_fd < 0){ perror("accept "); exit(1); } //创建一个线程,用于读取客户端信息 pthread_create(&th_id, NULL, read_func, &new_fd); } return 0; }客户端程序
#include <stdio.h>
#include <sys/types.h> /* See NOTES */ #include <sys/socket.h> #include <string.h> #include <stdlib.h> #include <arpa/inet.h> #include <netinet/in.h> void *recv_func(void *arg) { char buf[10] = {'\0'}; int fd = *(int *)arg; int ret = -1; while(1){ ret = read(fd, buf, 6); if(0 == ret){ printf("server is exit!\n"); exit(1); } if(ret < 0){ perror("read"); pthread_exit(NULL); } printf("read:%s\n", buf); } } int main(void) { int fd = -1; int new_fd = -1; int ret = 0; char buf[6]; pthread_t th_id; struct sockaddr_in server_add; //建立Socket连接 fd = socket(AF_INET, SOCK_STREAM, 0); if(fd < 0){ perror("socket"); exit(1); } //设置sockaddr_in结构体中的相关参数 server_add.sin_family = AF_INET; server_add.sin_port = htons(8888); server_add.sin_addr.s_addr = inet_addr("192.168.7.200"); #if 0 ret = bind(fd, (struct sockaddr *)&server_add, sizeof(struct sockaddr)); if(ret < 0){ perror("bind "); exit(1); } #endif ret = connect(fd, (struct sockaddr *)&server_add, sizeof(struct sockaddr)); if(ret < 0){ perror("connect "); exit(1); } //创建一个线程,用于接收服务端信息 pthread_create(&th_id, NULL, recv_func, &fd); while(1){ memset(buf, 0, 6); fgets(buf, 6, stdin); write(fd, buf, 6); printf("read:%s\n", buf); } close(fd); return 0; }编译:
gcc -o client_process client_process.c -lpthread
gcc -o server_process server_process.c -lpthread先运行服务端
./server_process
再运行客户端
./client_process
转载地址:http://sfiub.baihongyu.com/