linux socket 多人聊天软件,Linux Socket编程---TCP实现多客户端的网络聊天室
#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实现多客户端的网络聊天室相关推荐
- 基于Android的聊天软件,Socket即时通信,实现用户在线聊天
基于Android的聊天软件,Socket即时通信,单聊,聊天室,可自行扩展功能,完善细节. [实例功能] 1.运行程序,登录界面, 注册账号功能 2.进入主界面,有通讯录, 个人信息. 3.点击好友 ...
- 【亡羊补牢】计算机网络灵魂之问 第9期 如果让你做一个视频聊天软件,你用tcp还是udp?为什么?
这是博主面向腾讯学习的面试题大整理系列,可以在如下github仓库Issues中通过 Labels 标签分类查看相关内容,同时欢迎大家指正可能的错误并且提出自己的解答,希望大家学的鱼块,春秋招顺利! ...
- linux上类似迅雷的软件,linux下有没有像迅雷或者快车的那种下载软件?
clark_2011 于 2011-04-02 17:17:55发表: 学习中! teber 于 2011-04-02 11:39:13发表: 一直用迅雷,看来下东西还要两个系统来回切了, 要是能多台 ...
- linux安装桌面上的软件,linux安装桌面软件
CentOS 作为服务器的操作系统是很常见的,但是因为需要稳定而没有很时髦的更新,所以很少做为桌面环境.在服务器上通常不需要安装桌面环境,最小化地安装 CentOS(也就是 minimal CentO ...
- 局域网聊天软件都有哪些?几款常用的局域网聊天软件推荐
随着科技的不断发展,人们在日常生活和工作中越来越需要高效便捷的沟通工具.而局域网聊天软件就是一种在局域网内使用的聊天工具,它能够帮助用户在同一网络内的设备之间进行即时通讯,无需依赖于互联网连接,安全又 ...
- python 实战之模仿开发QQ聊天软件(三)TCP/IP服务器与客户端建设
无论是p2p还是c/s还是b/s,只要用到通讯,必然是要用到今天写的这个. python+MYSQL 在pycharm中的使用 TCP/IP是网络软件最核心的部分,缺少这个你只能当做单机游戏玩. TC ...
- 用java编写一个聊天程序_基于JAVA实现的一个简单的网络聊天程序
一.Java Socket的概述 1.Socket套接字方便了开发网络应用程序.TCP面向连接的可靠传输协议.具有数据确认和数据重传机制.保证了发送数据一定能到达通信的对方.UPD协议无连接,不可靠的 ...
- 多线程 python tcp 图片_Python第四周之网络编程TCP (服务器/客户端; 线程下载图片;线程版服务器和客户端(单人、多人)) UDP...
# 网络编程 # 计算机网络, 把多台独立自主的计算机,连接到网络,实现资源的共享 # Internet网,(互联网)eniac 1946美国大学第一台电子计算机 # # 一个TCP报文除了包含要传输 ...
- JAVA网络编程 -UDP篇(简单实现网络聊天)
通过UDP实现网络聊天 多线程实现UDP网络聊天 1. 编写UDP发送线程UdpSendThread import java.io.BufferedReader; import java.io.IOE ...
最新文章
- linux-RPM安装
- 解决python 保存json到文件时 中文显示16进制编码的问题
- 【BZOJ1086】[SCOI2005]王室联邦 树分块
- thrift多平台安装
- 大数据时代企业如何保障数据安全?这款工具值得一看
- access查询成绩小于5分_又一所大学公布成绩!5个人中有4人专业课130分以上,厉害了!...
- 大数据WEB阶段(十八)数据库事务
- RocketMQ的发展历史
- sql 删除最低分数_软件测试从业者:必备SQL语句21天打卡,前10天
- 机器人 魂斗罗铁血兵团_《魂斗罗铁血兵团:反叛》XBLA游戏下载
- Linux ping ipv66,IPV6的测试-ipv6网卡配置-ipv6的nginx配置-ipv6的ping测试-ipv6的curl测试...
- 城市风云儿的装备体系
- 【POJ1050+POJ2018+HDOJ6638+牛客1006D】最大子段和问题
- 自定义SwipeBackLayout控件实现右滑退出activity功能
- Jena TDB的使用简介
- Ubuntu20.04 配置网卡信息
- 【产业互联网周报】互联网集体进入调整期:张勇兼任阿里云总裁,卢伟冰晋升小米集团总裁,小鹏组织架构调整;...
- 版本管理之SVN客户端的下载安装和使用
- 从今天开始喂马、劈柴,周游世界
- Mac OSX系统下使用DosBox编写汇编
热门文章
- 如何用python生成软件_python中的生成器函数是如何工作的?
- 如何在面试中介绍自己的项目经验,90%的人都做错了!
- 5.Java中的常量以及常量的分类
- 6.Android的学习(Intent跳转页面,活动之间传递数据)
- JavaScript实现动态规划方法计算特定位置的斐波那契数fibonacciNth算法(附完整源码)
- wxWidgets:wxTextCtrl类用法
- wxWidgets:wxSpinCtrlDouble类用法
- boost::mp11::mp_set_difference相关用法的测试程序
- boost::detail::conversion::try_lexical_convert用法的测试程序
- boost::fusion::reverse用法的测试程序