
客户端
#include <head.h>
int flag=1;
//客户端接收线程
void * client_recv(void* arg)
{
int client=*(int*)arg;
while(1)
{
char arr[128];
memset(arr,0,128);
int res=read(client,arr,127); //将读取到的数据存放在首地址偏移4个字节的位置处
if(res==0)
{
printf("\n服务端断开连接~\n");
flag=0;
break;
}
printf("\n接收到对方发来的内容:%s\n",arr);
printf("请输入聊天内容:");
fflush(stdout);
}
pthread_exit(NULL);
}
//客户端发送线程
void* client_send(void* arg)
{
int client=*(int*)arg;
while(1)
{
//客户端发送
char msg[128]="";
printf("请输入聊天内容:");
scanf("%s",msg);
getchar();
msg[strcspn(msg, "\n")] = '\0';
if(flag==0)
{close(client);
break;
}
if(-1==write(client,msg,strlen(msg)))
{
return NULL;
}
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("请输入端口号!\n");
return 1;
}
short port=atoi(argv[1]);
int client=socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in addr={0};
addr.sin_family=AF_INET;
addr.sin_port=htons(port); //端口写服务器写的端口号
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
int a=connect(client,(struct sockaddr*)&addr,sizeof(addr));
if(a==-1)
{
printf("连接失败\n");
return 0;
}
printf("链接成功\n");
pthread_t p2;
if(0!=(errno=pthread_create(&p2,NULL,client_recv,&client)))
{
ERRLOG("pthread_create error");
}
pthread_t p1;
if(0!=(errno=pthread_create(&p1,NULL,client_send,&client)))
{
ERRLOG("pthread_create error");
}
pthread_join(p1,NULL);
pthread_join(p2,NULL);
close(client);
return 0;
}
服务端
#include <head.h>
void* server_send(void* arg)
{
int client=*(int*)arg;
//服务端发送
while(1)
{
char msg[128]="";
printf("请输入聊天内容:");
scanf("%s",msg);
getchar();
msg[strcspn(msg, "\n")] = '\0';
write(client,msg,strlen(msg));
}
pthread_exit(NULL);
}
//服务端接收函数
void *server_recv(void* arg)
{
int client=*(int*)arg;
while(1)
{
char arr[128];
memset(arr,0,128);
int res=read(client,arr,127); //将读取到的数据存放在首地址偏移4个字节的位置处
if(res==0)
{
printf("\n客户端断开连接~\n");
return;
}
printf("\n接收到对方发来的内容:%s\n",arr);
printf("请输入聊天内容:");
fflush(stdout);
}
pthread_exit(NULL);
}
int main(int argc, const char *argv[])
{
if(argc<2)
{
printf("请输入端口号!\n");
return 1;
}
short port=atoi(argv[1]);
//创建服务器套接字
int server=socket(AF_INET,SOCK_STREAM,0);
//准备好要写入的套接字信息结构体,初始化信息
struct sockaddr_in addr={0};
//设置地址族为ipv4
addr.sin_family=AF_INET;
//设置监听端口号
addr.sin_port=htons(port);
//设定接收的ip地址,0为接收所有
addr.sin_addr.s_addr=inet_addr("0.0.0.0");
//将结构体信息(ip和port)写入套接字中
if(bind(server,(struct sockaddr*)&addr,sizeof(addr))==-1)
{
perror("bind error..");
return -1;
}
//监听
listen(server,10);
//接收
//准备好客户端结构体
struct sockaddr_in client_addr;
int client_len = sizeof(client_addr);
//接收客户端,返回客户端套接字
int client = accept(server,(struct sockaddr*)&client_addr,&client_len);
if(client==-1)
{
ERRLOG("客户端接受失败");
}
printf("有客户端连接成功!\n");
pthread_t p2;
if(0!=(errno=pthread_create(&p2,NULL,server_send,&client)))
{
ERRLOG("pthread_create error");
}
pthread_t p1;
if(0!=(errno=pthread_create(&p1,NULL,server_recv,&client)))
{
ERRLOG("pthread_create error");
}
pthread_join(p1,NULL);
pthread_join(p2,NULL); close(client);
close(server);
return 0;
}
1485

被折叠的 条评论
为什么被折叠?



