TCP一对一双向通信
1.服务器端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
int acpt_fd = -1;
void *server_send(void *ptr)
{
char *buf = malloc(100);
while(1)
{
memset(buf, 0, 100);
fgets(buf, 100, stdin);
send(acpt_fd, buf, strlen(buf), 0);
}
}
int main(int argc, const char *argv[])
{
if(argc != 3)
{
printf("请输入IP和端口号\n");
return -1;
}
//1.创建套接字文件
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd == -1)
{
perror("creat socket failed");
}
//2.绑定服务器地址
struct sockaddr_in server,client;
server.sin_family = AF_INET;
server.sin_port = htons(atoi(argv[2]));
server.sin_addr.s_addr = inet_addr(argv[1]);
bind(socket_fd, (struct sockaddr *)&server, sizeof(server));
//3.监听
listen(socket_fd, 4);
//4.等待连接
printf("等待连接....\n");
socklen_t client_len = sizeof(client);
acpt_fd = accept(socket_fd, (struct sockaddr*)&client, &client_len);
printf("连接成功!!!\n");
//5.接收消息
char *buf = malloc(100);
//创建线程
pthread_t tid;
pthread_create(&tid, 0, server_send, NULL);
int num = 0;
while(1)
{
memset(buf, 0, 100);
num = recv(acpt_fd, buf, 100, 0);
printf("客户端:%s", buf);
}
close(socket_fd);
return 0;
}
2.客户端
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
int socket_fd = -1;
void *client_recv(void *ptr)
{
char *buf = malloc(100);
while(1)
{
memset(buf, 0, 100);
recv(socket_fd, buf, 100, 0);
printf("服务器:%s",buf);
}
}
int main(int argc, const char *argv[])
{
if(argc != 3)
{
printf("请输入IP和套接字\n");
return -1;
}
//1.创建套接字文件
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd == -1)
{
perror("creat socket failed");
}
//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]);
bind(socket_fd, (struct sockaddr *)&server, sizeof(server));
//4.等待连接
printf("发起连接....\n");
connect(socket_fd, (struct sockaddr *)&server, sizeof(server));
printf("连接成功!!!\n");
//5.发送消息
char *buf = malloc(100);
//创建线程
pthread_t tid;
pthread_create(&tid, 0, client_recv, NULL);
while(1)
{
memset(buf, 0, 100);
fgets(buf, 100, stdin);
send(socket_fd, buf, strlen(buf), 0);
}
close(socket_fd);
return 0;
}
3.运行结果