c 语言简单的聊天程序,写一个C-S程序,实现简单的聊天功能。(tcp/ip)
client客户端处理器
#include #include #include #include #include #include #include #include
int sockfd;/* 客户端socket /
char IPADDR = “10.0.0.7”;/* 服务器的IP地址 /
short PORT = 6025;/ 服务器服务端口 */
typedef struct sockaddr SA;
char name[30];
void init()
{
sockfd = socket(AF_INET,SOCK_STREAM,0);
struct sockaddr_in addr;
bzero(&addr,sizeof(struct sockaddr_in));
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = inet_addr(IPADDR);
if (connect(sockfd,(SA*)&addr,sizeof(addr)) == -1)
{
perror("无法连接到服务器");
exit(-1);
}
printf("客户端启动成功\n");
}
void start()
{
pthread_t id;
void* recv_thread(void*);
pthread_create(&id,0,recv_thread,0);
char buf2[100] = {};
sprintf(buf2,"%s进入了聊天室",name);
send(sockfd,buf2,strlen(buf2),0);
while(1)
{
char buf[100] = {};
scanf("%s",buf);
char msg[131] = {};
sprintf(msg,"%s:%s",name,buf);
send(sockfd,msg,strlen(msg),0);
if (strcmp(buf,"bye") == 0)
{
memset(buf2,0,sizeof(buf2));
sprintf(buf2,"%s退出了聊天室",name);
send(sockfd,buf2,strlen(buf2),0);
break;
}
}
close(sockfd);
}
void* recv_thread(void* p)
{
while(1)
{
char buf[100] = {};
if (recv(sockfd,buf,sizeof(buf),0) <= 0)
{
return;
}
printf("%s\n",buf);
}
}
int main()
{
init();
printf(“请输入您的名字:”);
scanf("%s",name);
start();
return 0;
}
service服务端
#include #include #include #include #include #include
#define IPADDR “10.0.0.7”
#define PORT 6025
int listenfd; /* 服务器socket */
int sockfd = 0;
int main(int argc ,char **argv)
{
listenfd = socket(AF_INET,SOCK_STREAM,0);
if (listenfd == -1)
{
perror(“创建socket失败!!!”);
return -1;
}
struct sockaddr_in s_add, c_add;
bzero(&s_add,sizeof(struct sockaddr_in));
s_add.sin_family = AF_INET;
s_add.sin_port = htons(PORT);
s_add.sin_addr.s_addr = inet_addr(IPADDR);
int len = sizeof(s_add);
if (bind(listenfd,(struct sockaddr*)&s_add,sizeof(struct sockaddr)) == -1)
{
perror("绑定失败");
return -1;
}
if (listen(listenfd,10) == -1)
{
perror("设置监听失败");
return -1;
}
if(-1 == (sockfd = accept(listenfd, (struct sockaddr*)&c_add, &sizeof(c_add) )))
{
perror("accept error 1");
return -1;
}
printf("IP: %s connected !\n", inet_ntoa(c_add.sin_addr) );
printf("服务器启动成功\n");
while(1)
{
fd_set readfds;
FD_ZERO(&readfds);
FD_SET(0, &readfds);
FD_SET(sockfd, &readfds);
select(sockfd+1, &readfds, NULL, NULL, NULL);
char buf[1024];
if(FD_ISSET(0, &readfds))
{
printf("input> ");fflush(stdout);
gets(buf);
write(sockfd, buf, sizeof buf);
}
if(FD_ISSET(sockfd, &readfds))
{
read(sockfd, buf, sizeof buf);
printf("%s\n", buf);
}
}
close(sockfd);
}
c 语言简单的聊天程序,写一个C-S程序,实现简单的聊天功能。(tcp/ip)相关推荐
- 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装
在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...
- c语言程序输入n个数字排序,请问,C语言能人请进,用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说...
导航:网站首页 > 请问,C语言能人请进,用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说 时间:2016-12-18 用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说思 ...
- 用JAVA写一个画图小程序(JAVA 大作业)
第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...
- 利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序
利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序 前面两篇文章已经介绍过 tap/tun 的原理和配置工具.这篇文章通过一个编程示例来深入了解 tap/tun 的程序结构. ...
- 面试必问:用 Java 写一个内存泄漏程序
编译:ImportNew/唐尤华 原文链接:stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java 问题: 刚参加的一 ...
- python学习(10)字典学习,写一个三级菜单程序
学习了字典的应用.按老师的要求写一个三级菜单程序. 三级菜单程序需求如下: 1.深圳市的区--街道--社区---小区4级 2.建立一个字典,把各级区域都装进字典里 3.用户可以从1级进入2级再进入3级 ...
- python编写木马攻击_用Python写一个自动木马程序
电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...
- 手把手教你写一个微信小程序日历组件
今天我们一起写一个微信小程序日历组件 微信小程序日历组件 github.com/749264345/w- 好,我们先看一下要实现的模样,如下图 由以上截图我们可以看到 1.日历可以通过按钮[切换展示效 ...
- 用爬虫写一个,小说下载程序
用爬虫写一个,小说下载程序 环境:python 3.7.3 没啥难度和技术含量,随便写写.本来程序有部分可用format进行优化,但又想了想小说名可能还会 有一些奇奇怪怪的符号,就没弄了. impor ...
- 用微信开发者小程序写一个加法计算器小程序
文章目录 前言 一.calculator.wxml代码 二.calculator.js代码 结果 前言 提示:用软件微信开发者小程序写一个加法计算器小程序 一.calculator.wxml代码 &l ...
最新文章
- CSS实现超过一定的宽度添加省略
- python的数字比较好_说说 Python3 中的数字处理
- 关于js对象引用的小例子
- Aspose.Cells使用总结大全
- modbus协议手册_20种PLC元件编号和Modbus编号地址对应表
- 操作系统系列题型分析(更新中~)
- Android 系统(165)---在apns-conf文件中配置一个read_only字段,使APN不可被编辑
- SQL Server 时间、日期函数
- 【矩阵论】线性空间与线性变换(2)
- 7个可以改变一生的自学网站,每天3小时,效果直线上升!
- iThoughtsX for mac(优秀的思维导图软件)
- 计算机中存储数据最小的单位是什么,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
- RGB图像之灰度级和通道的理解(矩阵含义等)
- Ubuntu安装eigen
- 用Vue+Node从零开始实现拼多多前后端商城项目 — 记录踩坑之旅(上篇)
- 网络攻防之dns劫持与网页挂马(实测)
- matlab 随机数产生
- 仿链家地图找房的简单实现 1
- java笔记10-多态
- 分享111个JS文字特效,总有一款适合您
热门文章
- 中南大学计算机学院羽毛球赛,“羽你同行”交通院第六届师生羽毛球赛圆满举办...
- android listview settag,Android View中setTag的二三事
- std::setprecision、std::ios::fixed使用说明
- 在保护继承中基类的共有成员_C++学习大纲:继承方式的调整
- 吉林省统考计算机英语作文,2019年吉林省学位英语作文必背范文(我最……的题材) - 希赛网...
- tms脚本演示代码之一
- JS获取当前时间date()的用法
- Nginx代理webSocket经常中断的解决方案, 如何保持长连接
- 数据库同步和数据库复制技术分析
- PayPal Agility with Stability On OpenStack