⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 client.c

📁 多线程库
💻 C
字号:
#define __THREADS_MAIN#include <thread.h>extern "C" {#include <stddef.h>#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <errno.h>#include <fcntl.h>#include <sys/mman.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/file.h>#include <sys/socket.h>#include <sys/un.h>#include <sys/time.h>};char share[90];struct sockaddr_un sock;int sock_id;size_t size;int local_socket(const char *fname){  if ( (sock_id = socket(PF_LOCAL,SOCK_DGRAM,0)) < 0 )    return -1;  sock.sun_family = AF_LOCAL;  strncpy(sock.sun_path,fname,sizeof(sock.sun_path));  size = SUN_LEN(&sock);  if ( bind(sock_id,(struct sockaddr *)&sock,size) < 0 )    return -1;  return sock_id;}int local_recv(const char *msg, int max){  struct sockaddr_un named_sock;  size_t size = sizeof(struct sockaddr_un);  int nbytes;  nbytes = recvfrom(sock_id,(void *)msg,max,0,(struct sockaddr *)&named_sock,&size);  cout << "read " << nbytes << " bytes.\n";  return nbytes;}int local_send(const char *msg){  int nbytes;  nbytes = sendto(sock_id,msg,strlen(msg)+1,0,(struct sockaddr *)&sock,size);  cout << "sent " << nbytes << " bytes.\n";  return nbytes;}int local_input(int seconds){  fd_set set;  struct timeval timeout;  FD_ZERO(&set);  FD_SET(sock_id,&set);  timeout.tv_sec = seconds;  timeout.tv_usec = 0;  return select(FD_SETSIZE,&set,NULL,NULL,&timeout);}class server : public pthread { private:  char *buf; public:  server()    {      buf = new char[80];      unlink("/tmp/client");      cout << "open socket\n";      if ( local_socket("/tmp/client") == -1 )	exit(-1);      cout << "restart\n";      restart();    }  ~server() { };  int thread(void *x)    {      suspend();      cout << "server active" << endl;      while( true ) {	cout << "loop" << endl;	if ( local_input(2) == 1 ) {	  if ( local_recv(buf,80) > 0 )	    cout << "server: " << buf << endl;	}      }    }};int main(int argc, char **argv){  server *serv;  if ( argc == 1 ) {    serv = new server;    for(int i=1;i<5;i++) {      local_send("lock me momma, lock me good...");      sleep(1);    }    cout << "join result #" << serv->join() << endl;  } else {    unlink("/tmp/client");    local_socket("/tmp/client");    for(int i=1;i<5;i++) {      local_send("rock a bye, baby...");      sleep(1);    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -