C语言实现匿名聊天(多客户端一服务器)
C语言实现匿名聊天(客户端之间)
客户端
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <pthread.h>#define SER_IP "192.168.1.116"
void* send_func(void* arg);
void* recv_func(void* arg);int main()
{int sockfd = socket(AF_INET,SOCK_STREAM,0);if(0 > sockfd){perror("socket");return -1;}struct sockaddr_in addr = {};addr.sin_family = AF_INET;addr.sin_port = htons(7767);addr.sin_addr.s_addr = inet_addr(SER_IP);socklen_t len = sizeof(addr);if(connect(sockfd,(struct sockaddr*)&addr,len)){perror("bind");return -1;}pthread_t pid1;pthread_create(&pid1, NULL, recv_func, &sockfd);pthread_create(&pid1, NULL, send_func, &sockfd); void* p = NULL;pthread_join(pid1, &p);
}void* recv_func(void* arg)
{int sockfd = *(int*)arg;char buf[1024] = {};for(;;){read(sockfd,buf,sizeof(buf));printf("%s\n",buf);}
}void* send_func(void* arg)
{printf("what is your name :");char name[20] = {};gets(name);int sockfd = *(int*)arg;char buf[1024] = {};char buf1[2048] = {};for(;;){gets(buf);sprintf(buf1,"%s:%s",name,buf);write(sockfd,buf1,strlen(buf1)+1);if(0 == strcmp("quit",buf)){printf("quit\n");pthread_exit(NULL);}}
}
服务器
#include <stdio.h>
#include <stdbool.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <pthread.h>int a[128];bool exit(int fd)
{int i;for( i=0; a[i]; i++){if(fd == a[i]) return true;}return false;
}void* func(void* arg)
{int newfd = *(int*)arg;char buf[1024] = {};int i;while(true){read(newfd,buf,sizeof(buf));printf("%s\n",buf);if(0 == strcmp("quit",strchr(buf, ':')+1)){close(newfd);pthread_exit(NULL);}for(i=0; a[i]; i++){if(a[i] != newfd){write(a[i],buf,strlen(buf)+1);}}}
}int main()
{int sockfd = socket(AF_INET,SOCK_STREAM,0);if(0 > sockfd){perror("socket");return -1;}struct sockaddr_in addr = {};addr.sin_family = AF_INET;addr.sin_port = htons(7767);addr.sin_addr.s_addr = htonl(INADDR_ANY);socklen_t len = sizeof(addr);if(bind(sockfd,(struct sockaddr*)&addr,len)){perror("bind");return -1;}if(listen(sockfd,128)){perror("listen");return -1;}int num = 0;printf("wait...\n");while(true){struct sockaddr_in client_addr = {};int newfd = accept(sockfd,(struct sockaddr*)&client_addr,&len);if(0 > newfd){perror("accept");continue;} if(!exit(newfd)){a[num++] = newfd;}pthread_t pid;pthread_create(&pid, NULL, func, &newfd);}
}
C语言实现匿名聊天(多客户端一服务器)相关推荐
- qq聊天信息服务器,golang实现qq聊天之客户端与服务器
一.用到的net方法 1 .客户端: var buf [512]byte tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0 ...
- 基于Python语言、RSA非对称加密的IRC聊天室客户端
源码地址: (55条消息) 基于Python语言.RSA非对称加密的IRC聊天室客户端源码与应用程序-Python文档类资源-CSDN文库 1 研究背景和现状 IRC是Internet Relay C ...
- 14个同陌路人匿名聊天在线工具排除你的寂寞和无聊
感谢saas114的投递 寂寞无聊干嘛呢?特别是在网络上,找一个陌生的人聊聊天,显然是一个较好的注意,而基于web的匿名聊天工具,为你提供了极大的方便,让你打开网页就可以和一个从不相互认识的人聊天,肆 ...
- C语言实现网络聊天室 socket的简单应用
C语言实现网络聊天室 socket的简单应用 前言:环境是Linux ,使用了 socket和pthread,主要分为服务器端和客户端两部分,服务器端监听端口发来的请求,收到后向客户端发送一个消息,客 ...
- C语言实现Linux聊天工具
项目源码:https://github.com/One-Snail/mychatroom 引言 在互联网越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网 络,QQ.微软MSN.移动的Feti ...
- TCP 聊天室v2 实现多人匿名聊天 C++,linux系统下
使用select IO复用实现多人匿名聊天室(linux系统下) 功能:用户可发送消息,并同时能看到其他用户发的消息,用户输入over退出 实现思路: 服务端仅作为消息的中转方,使用select管理所 ...
- Linux网络编程:用C语言实现的聊天程序(同步通信)
通过TCP协议,用C语言实现的同步聊天程序,注释写的比较详细,个人觉得对字符串处理比较充分,能够正常编译运行,拿出来和大家分享一下! 1.客户端源代码: [cpp] view plaincopypri ...
- Yep (对头)-盲盒社交,匿名聊天
聊天网址(用手机浏览器打开哦): http://www.findmechat.net Yep!(对头)是一个非常受欢迎的随机.异性.匿名交友社区.随机聊天,同城匹配,帮助用户结识互有好感的新朋友 使用 ...
- java聊天程序_急需一个用java 语言写的聊天程序
展开全部 客户端: package chatroom; import java.awt.*; import java.awt.event.*; import java.net.*; import ja ...
最新文章
- arcgis里python窗口运行,在 Python 窗口中执行工具
- 上周热点回顾(10.27-11.2)
- OpenStack Placement Project(Rocky to Train)
- Linux——进程信号(总结)
- iOS之NSAttributedString-------字符属性
- Android自定义RadioButton
- 信息学奥赛一本通 1083:计算星期几 | OpenJudge NOI 小学奥数 7831
- jmeter.bat双击闪退问题
- GRIDVIEW 中当数据行数未满时,填充空白行
- Java程序员从笨鸟到菜鸟(三)算法笔试题
- debug and releas 不显示 调试窗口(DOS窗口/控制台)
- 雷霆战机单机老版本_雷霆战机下载_雷霆战机电脑版单机游戏下载
- 微信小商店购物组件接入现有的小程序,在开发者工具中使用
- 口算加密php怎么使用,从数盲到口算 ——带你玩转RSA加密算法(一)
- Linux下获取cpu温度
- 12306从上海到湖南境内的终点站车次或从湖南境内始发到上海的车次
- 【Babylon提升】重写相机控制器,实现仿地图操作
- 电动汽车智能充电桩的设计分析
- 使用@JsonFormat的一个坑,遇到了同样的问题,jsonfomat注解失效
- uboot命令实践:fat系列命令实践