server.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/un.h>
#include <pthread.h>
#include <sys/syscall.h> #define UNIX_DOMAIN "/tmp/test" void *threaddeal(void *arg)
{
printf("this is a new thread\n");
 int com_fd = *(int*)arg;
char recv_buf[];
memset(recv_buf,,);
char snd_buf[];
memset(snd_buf,,);
strcpy(snd_buf,"server to client");
int num;
while(num=read(com_fd,recv_buf,sizeof(recv_buf)))
{
printf("server recv (%d)) :%s, threadid = %u,lwpid = %u\n",num,recv_buf,pthread_self(),syscall(SYS_gettid));
memset(recv_buf,,);
write(com_fd,snd_buf,sizeof(snd_buf));//回复client
}
close(com_fd);
} int main(void)
{
socklen_t clt_addr_len;
int listen_fd;
int com_fd;
int ret;
struct sockaddr_un clt_addr;
struct sockaddr_un srv_addr;
listen_fd=socket(PF_UNIX,SOCK_STREAM,);
if(listen_fd<)
{
perror("cannot create communication socket");
return ;
} //set server addr_param
srv_addr.sun_family=AF_UNIX;
strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-);
unlink(UNIX_DOMAIN);
//bind sockfd & addr
ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-)
{
perror("cannot bind server socket");
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}
//listen sockfd
ret=listen(listen_fd,);
if(ret==-)
{
perror("cannot listen the client connect request");
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}
//have connect request use accept
clt_addr_len=sizeof(clt_addr);
while()
 {
com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&clt_addr_len);
if(com_fd<)
{
perror("cannot accept client connect request");
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}
  //开一个新线程处理新连接com_fd
pthread_t threadid; //线程的标识符
if(pthread_create(&threadid,NULL,threaddeal,(void*)(&com_fd)) != )
{
perror("cannot creat new thread");
} }
close(listen_fd);
unlink(UNIX_DOMAIN);
return ;
}

client.c

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <pthread.h> #define UNIX_DOMAIN "/tmp/test" void *threaddeal(void *arg)
{
printf("this is a new thread\n");
int com_fd = *(int*)arg;
char recv_buf[];
memset(recv_buf,,);
char snd_buf[];
memset(snd_buf,,);
int num;
while(num=read(com_fd,recv_buf,sizeof(recv_buf)))
{
printf("client recv : (%d)) :%s\n",num,recv_buf);
memset(recv_buf,,);
}
close(com_fd);
} int main(void)
{
int connect_fd;
int ret;
char snd_buf[];
struct sockaddr_un srv_addr;
//creat unix socket
connect_fd=socket(PF_UNIX,SOCK_STREAM,);
if(connect_fd<)
{
perror("cannot create communication socket");
return ;
}
srv_addr.sun_family=AF_UNIX;
strcpy(srv_addr.sun_path,UNIX_DOMAIN);
//connect server
ret=connect(connect_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-)
{
perror("cannot connect to the server");
close(connect_fd);
return ;
}
memset(snd_buf,,);
strcpy(snd_buf,"client send to server11111111111");

  //开新线程处理server返回
pthread_t threadid; //线程的标识符
if(pthread_create(&threadid,NULL,threaddeal,(void*)(&connect_fd)) != )
{
perror("cannot creat new thread");
}
//send msg to server
while(){
write(connect_fd,snd_buf,sizeof(snd_buf));
sleep();
} close(connect_fd);
return ;
}

最新文章

  1. pushState、replaceState、onpopstate 实现Ajax页面的前进后退刷新
  2. Nginx简易配置文件(一)(静态页面及PHP页面解析)
  3. C#封装C++DLL
  4. [转载]:Delphi xe7并行编程快速入门
  5. .NET在后置代码中输入JS提示语句(背景不会变白)
  6. Linux系统上安装Python
  7. atoi函数的实现(考虑不同进制、溢出)
  8. libevent带负载均衡的多线程使用示例
  9. linux进程创建
  10. 百度识图API
  11. c#弱事件(weak event)
  12. 使用SQL Server临时表来实现字符串合并处理
  13. 【原创】通过搬瓦工vps搭建SS环境,供学习用
  14. Laravel5中使用阿里大于(鱼)发送短信验证码
  15. java用POI操作excel——随便写一下,最基础的东西
  16. Maven 传递依赖冲突解决(了解)
  17. 学了这么久,vue和微信小程序到底有什么样的区别?
  18. ip2Long 代码
  19. GitLab添加ssh-key,操作无需每次输入账号密码
  20. JavaWeb知识点总结

热门文章

  1. springboot+JPA 整合redis
  2. 搭建Leanote网络云笔记
  3. 怎样通过name属性获取元素节点集合
  4. 转自:java 文件格式二进制头文件校验
  5. DX使用随记--TabControl
  6. python读取ubuntu系统磁盘挂载情况
  7. bash shell脚本之使用expr运算
  8. 4.SpringMVC 配置式开发-处理器映射器
  9. shell脚本——数组
  10. Image Processing and Computer Vision_Review:Local Invariant Feature Detectors: A Survey——2007.11