==============================================================
头文件: #include <pthread.h>
函数原型:
int pthread_create(pthread_t *thread,const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);参数分析:
thread ----新线程ID(如果为NULL,则会创建一个标准属性的线程) attr ----- 线程属性 start_routine ----线程例程 arg -----线程例程参数返回值:
成功 0 失败 errno=============================================================== 编译出现的问题:
clentTCP.c: In function ‘main’: clentTCP.c:45:5: error: unknown type name ‘phtread_t’ phtread_t TID; ^
Compile and link with -pthread. 由于pthread_create函数来自于posix库, 所以所在编译的时候需要额外链接线程库 -lpthread
===============================================================
接着上一篇的网络编程TCP客户端:
#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 <pthread.h> #define SERVER_IP "192.168.162.129" #define PORT 6502 //函数声明 void* func(void *); int main(int argc, char const *argv[]) { //创建套接字: int fd_socket = socket(AF_INET , SOCK_STREAM , 0); //配置地址信息: struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(PORT); addr.sin_addr.s_addr = inet_addr(SERVER_IP); //连接服务器: int addrlen = sizeof(addr); int ret = connect(fd_socket, (struct sockaddr *) &addr, addrlen); if(-1 == ret) { perror("connect error\n"); return -1; } else { printf("connect succeed\n"); } //等待来信和回复信息: char *buf = malloc(256); pthread_t TID; void *arg = &fd_socket; ret = pthread_create(&TID, NULL, func, arg); if(0 != ret) { perror("pthread error\n"); } while(1) { bzero(buf, 256); printf("clent:"); fgets(buf, 256, stdin); ret = send(fd_socket, buf, 256, 0); if(-1 == ret) { perror("send error\n"); } /* bzero(buf, 256); ret = recv(fd_socket, buf, 256, 0); if(-1 == ret) { perror("recv error\n"); } else { printf("server: %s\n",buf); }*/ } return 0 ; } //等待来信 void* func(void *arg) { char *buf = malloc(256); int* fd_socket = (int*)arg; while(1) { int ret = recv(*fd_socket, buf, 256, 0); if(-1 != ret) { printf("server:%s\n",buf); } bzero(buf,256); } }显示的效果就是服务器只要消息发送即可显示在客户端终端上。