服务端程序
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
客户端程序
#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