#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #include <netinet/ip.h> #define IP "127.0.0.1" #define PORT 8080 #define MAX 100 int final=0; // 创建socket套接字文件,并连接 // 接受数据 client 客户端 typedef struct sockaddr_in SIN; typedef struct sockaddr SA; SIN ser_addr; int sockfd; void *message(void *arg) { printf("thread creat success!\n"); char buf[100]; int signal; while(1) { if(final==1) break; memset(buf,0,100); signal=recv(sockfd,buf,MAX,0); if(signal!=0){ system("date"); write(1,buf,strlen(buf)); memset(buf,0,100);} } pthread_exit(NULL); } int main(int argc,char *argv[]) { //1、创建套接字文件,返回套接字文件描述符 socket() sockfd=socket(AF_INET, SOCK_STREAM, 0); pthread_t tid; if(sockfd == -1) { perror("socket create failure\r\n"); return 0; } //2、创建结构,初始化数据 struct sockaddr 使用 struct sockaddr_in SIN ser_addr; ser_addr.sin_family = AF_INET;//选择ipv4协议族 ser_addr.sin_port=htons(PORT); //端口号要转换端绪,从小端绪转换从大端绪 ser_addr.sin_addr.s_addr=inet_addr(IP);//十进制的字符ip转换成网端数据格式 服务端IP int len=sizeof(ser_addr); if(connect(sockfd,(SA *)&ser_addr,len)==-1) { perror("connect failure\r\n"); return 0; }else { printf("WELCOME TO DADONG TALK ROOM!\r\n"); printf("Please sign you name:"); char temp[20]={0}; memset(temp,0,100); scanf("%s",temp); send(sockfd,temp,strlen(temp),0);//发送信息 pthread_create(&tid,NULL,message,NULL); } char wbuf[100]={0}; while(1) { memset(wbuf,0,100); read(0,wbuf,100); if(strncmp(wbuf,"quit",4)==0) { send(sockfd,wbuf,strlen(wbuf),0); final=1; close(sockfd); return 0; } send(sockfd,wbuf,strlen(wbuf),MSG_NOSIGNAL); memset(wbuf,0,100); usleep(20); } close(sockfd); return 0; } 请用中文帮我解释这些代码
时间: 2024-04-19 11:28:33 浏览: 155
tcp_client.rar_tcp_client_visual c
这段代码是一个简单的基于Socket的聊天室程序。让我来解释一下每个部分的功能:
1. 头文件和变量定义:开始部分包含了一些标准库和网络相关的头文件,以及一些全局变量的定义。
2. 结构体定义:定义了两个结构体,SIN用于存储服务器的地址信息,SA用于存储通用的地址信息。
3. message函数:这是一个线程函数,用于接收服务器发送的消息并打印出来。它通过socket接收数据,并将接收到的消息打印在屏幕上,直到程序执行结束或者接收到特定信号。
4. 主函数main:主要分为以下几个步骤:
- 创建套接字:调用socket函数创建一个套接字文件描述符。
- 初始化服务器地址信息:将服务器的IP地址和端口号填入ser_addr结构体中。
- 连接服务器:调用connect函数连接到服务器。
- 发送用户名:用户输入用户名,然后通过send函数将用户名发送给服务器。
- 创建接收线程:调用pthread_create函数创建一个线程,用于接收服务器发送的消息。
- 发送消息:用户输入消息并通过send函数发送给服务器,如果输入"quit"则退出程序。
总体来说,这段代码实现了一个简单的聊天室程序,用户可以连接到服务器并发送、接收消息。
阅读全文