#include//打开文件

int fd;

//客户端socket

int client_sock;

//文件路径

char path[100];

//段口号

char port[100];

//发送线程

void *sendsocket(void *arg)

{

//接受socket

int st = *(int *)arg;

char sendbuffer[100];

char writebuffer[100];

while(1){

//向服务器发送数据

memset(sendbuffer, 0, sizeof(sendbuffer));

//printf("请输入消息:");

scanf("%s",sendbuffer);

memset(writebuffer, 0, sizeof(writebuffer));

strcat(writebuffer,sendbuffer);

strcat(writebuffer,"\n");

//写入文件

write(fd,writebuffer,sizeof(writebuffer));

//发送消息

send(st, sendbuffer, strlen(sendbuffer), 0);

}

return NULL;

}

//接受线程

void *recvsocket(void *arg)

{

int st = *(int *)arg;

char receivebuffer[100];

char writebuffer[100];

int n;

while(1){

//读取服务器传回的数据

memset(receivebuffer, 0, sizeof(receivebuffer));

n = recv(st, receivebuffer, sizeof(receivebuffer), 0);

//用于判断通信是否结束

if(n<=0)

break;

memset(writebuffer, 0, sizeof(writebuffer));

strcat(writebuffer,receivebuffer);

strcat(writebuffer,"\n");

//写入文件

write(fd,writebuffer,sizeof(writebuffer));

//输出

printf("%s\n", receivebuffer);

}

return NULL;

}

int main() {

//创建套接字

int sock = socket(AF_INET, SOCK_STREAM, 0);

//向服务器(特定的IP和端口)发起请求

struct sockaddr_in serv_addr;

memset(&serv_addr, 0, sizeof(serv_addr));//每个字节都用0填充

serv_addr.sin_family = AF_INET;

serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

serv_addr.sin_port = htons(6666);

//连接服务器,成功返回0

client_sock = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));

if(client_sock == 0) {

printf("服务器连接成功!\n");

}

//新建一个结构体

struct sockaddr_in client_addr;

memset(&client_addr, 0, sizeof(client_addr));

int len = sizeof(client_addr);

//获得本程序的sockaddr_in结构体

int ti = getsockname(sock, (struct sockaddr*)&client_addr, &len);

//对字符串拼接得到路径

sprintf(port,"%d",client_addr.sin_port);

strcat(path,"./usernote/");

strcat(path,port);

//打开文件

fd = open(path, O_CREAT|O_EXCL|O_WRONLY|O_APPEND|O_NONBLOCK);

if(fd == -1)

{

printf("失败!");

}

//创建发送接受两个线程 一个接受线程一个发送线程

pthread_t thrd1, thrd2;

pthread_create(&thrd1, NULL, sendsocket, &sock);

pthread_create(&thrd2, NULL, recvsocket, &sock);

pthread_join(thrd1, NULL);

pthread_join(thrd2, NULL);

//关闭文件

close(fd);

//关闭套接字

close(sock);

return 0;

}

linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室相关推荐

  1. 基于Android的聊天软件,Socket即时通信,实现用户在线聊天

    基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节. [实例功能] 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息. 3.点击好友 ...

  2. 【亡羊补牢】计算机网络灵魂之问 第9期 如果让你做一个视频聊天软件,你用tcp还是udp?为什么?

    这是博主面向腾讯学习的面试题大整理系列,可以在如下github仓库Issues中通过 Labels 标签分类查看相关内容,同时欢迎大家指正可能的错误并且提出自己的解答,希望大家学的鱼块,春秋招顺利! ...

  3. linux上类似迅雷的软件,linux下有没有像迅雷或者快车的那种下载软件?

    clark_2011 于 2011-04-02 17:17:55发表: 学习中! teber 于 2011-04-02 11:39:13发表: 一直用迅雷,看来下东西还要两个系统来回切了, 要是能多台 ...

  4. linux安装桌面上的软件,linux安装桌面软件

    CentOS 作为服务器的操作系统是很常见的,但是因为需要稳定而没有很时髦的更新,所以很少做为桌面环境.在服务器上通常不需要安装桌面环境,最小化地安装 CentOS(也就是 minimal CentO ...

  5. 局域网聊天软件都有哪些?几款常用的局域网聊天软件推荐

    随着科技的不断发展,人们在日常生活和工作中越来越需要高效便捷的沟通工具.而局域网聊天软件就是一种在局域网内使用的聊天工具,它能够帮助用户在同一网络内的设备之间进行即时通讯,无需依赖于互联网连接,安全又 ...

  6. python 实战之模仿开发QQ聊天软件(三)TCP/IP服务器与客户端建设

    无论是p2p还是c/s还是b/s,只要用到通讯,必然是要用到今天写的这个. python+MYSQL 在pycharm中的使用 TCP/IP是网络软件最核心的部分,缺少这个你只能当做单机游戏玩. TC ...

  7. 用java编写一个聊天程序_基于JAVA实现的一个简单的网络聊天程序

    一.Java Socket的概述 1.Socket套接字方便了开发网络应用程序.TCP面向连接的可靠传输协议.具有数据确认和数据重传机制.保证了发送数据一定能到达通信的对方.UPD协议无连接,不可靠的 ...

  8. 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...

    # 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...

  9. JAVA网络编程 -UDP篇(简单实现网络聊天)

    通过UDP实现网络聊天 多线程实现UDP网络聊天 1. 编写UDP发送线程UdpSendThread import java.io.BufferedReader; import java.io.IOE ...

最新文章

  1. linux-RPM安装
  2. 解决python 保存json到文件时 中文显示16进制编码的问题
  3. 【BZOJ1086】[SCOI2005]王室联邦 树分块
  4. thrift多平台安装
  5. 大数据时代企业如何保障数据安全?这款工具值得一看
  6. access查询成绩小于5分_又一所大学公布成绩!5个人中有4人专业课130分以上,厉害了!...
  7. 大数据WEB阶段(十八)数据库事务
  8. RocketMQ的发展历史
  9. sql 删除最低分数_软件测试从业者:必备SQL语句21天打卡,前10天
  10. 机器人 魂斗罗铁血兵团_《魂斗罗铁血兵团:反叛》XBLA游戏下载
  11. Linux ping ipv66,IPV6的测试-ipv6网卡配置-ipv6的nginx配置-ipv6的ping测试-ipv6的curl测试...
  12. 城市风云儿的装备体系
  13. 【POJ1050+POJ2018+HDOJ6638+牛客1006D】最大子段和问题
  14. 自定义SwipeBackLayout控件实现右滑退出activity功能
  15. Jena TDB的使用简介
  16. Ubuntu20.04 配置网卡信息
  17. 【产业互联网周报】互联网集体进入调整期:张勇兼任阿里云总裁,卢伟冰晋升小米集团总裁,小鹏组织架构调整;...
  18. 版本管理之SVN客户端的下载安装和使用
  19. 从今天开始喂马、劈柴,周游世界
  20. Mac OSX系统下使用DosBox编写汇编

热门文章

  1. 如何用python生成软件_python中的生成器函数是如何工作的?
  2. 如何在面试中介绍自己的项目经验,90%的人都做错了!
  3. 5.Java中的常量以及常量的分类
  4. 6.Android的学习(Intent跳转页面,活动之间传递数据)
  5. JavaScript实现动态规划方法计算特定位置的斐波那契数fibonacciNth算法(附完整源码)
  6. wxWidgets:wxTextCtrl类用法
  7. wxWidgets:wxSpinCtrlDouble类用法
  8. boost::mp11::mp_set_difference相关用法的测试程序
  9. boost::detail::conversion::try_lexical_convert用法的测试程序
  10. boost::fusion::reverse用法的测试程序