day11

|#include <stdio.h>

include <string.h>

include <sys/types.h>

include <sys/socket.h>

include <netinet/in.h>

include <arpa/inet.h>

include <netinet/ip.h>

include <unistd.h>

include <sys/wait.h>

include <stdlib.h>

include <pthread.h>

define PORT 8080

define IP "192.168.11.100"

typedef struct sockaddr SA;
typedef struct sockaddr_in SIN;
int len=sizeof(SIN);
/*
服务端和客户端之间正常通信
客户端
*/
void *cli_send(void *arg)
{
long temp=(long)arg;
int fd=(int)temp;
char buf[100]={0};
while(1)
{
memset(buf,0,100);//读取终端数据之前清空buf内容
read(0,buf,100);//读取终端信息
send(fd, buf, strlen(buf), 0);//发送信息到服务器
if(strncmp("quit",buf,4) == 0)//判断是否退出连接
{
break;
}
}
pthread_exit(NULL);//回收线程资源,不返回数据
}

void *cli_recv(void *arg)
{
long temp=(long)arg;
int fd=(int)temp;
char buf[100]={0};
while(1)
{
memset(buf,0,100);//接受之前清空buf
recv(fd, buf, 100, 0);//接受服务端的信息
printf("receive:%s\r\n",buf);//输出到终端
if(strncmp("quit",buf,4) == 0)
{
break;
}
}
pthread_exit(NULL);//回收线程资源

}

int main(int argc,char *argv[])
{
//1、创建socket套接字文件 socket()
int sockfd=socket(AF_INET, SOCK_STREAM, 0);
if(sockfd == -1)
{
perror("socket create fai;ure\r\n");
return 0;
}

//2、创建结构体变量,初始化信息 struct socksddr端口号和IP写在一起   struct socksddr_in
SIN cli_addr;
cli_addr.sin_family=AF_INET;
cli_addr.sin_port=htons(PORT);
cli_addr.sin_addr.s_addr=inet_addr(IP);

//3、主动申请连接服务器connect()
if(connect(sockfd, (SA *)&cli_addr,len) == -1)
{
    perror("connect failure\r\n");
    return 0;
}
printf("连接成功!!!\r\n");

//创建两个线程函数,分别用来发送信息和接受信息
long temp=(long)sockfd;//转换类型,防止数据丢失,避免不能传送
pthread_t tid[2]={0};
pthread_create(&tid[0], NULL,cli_send, (void *)temp);
pthread_create(&tid[1], NULL,cli_recv, (void *)temp);

pthread_join(tid[0], NULL);//不希望往下走,这是阻塞等待
pthread_join(tid[1], NULL);
//关闭文件
close(sockfd);

return 0;

} |

posted @ 2022-01-13 18:57  codebuilder  阅读(56)  评论(0编辑  收藏  举报