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)相关推荐

  1. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

  2. c语言程序输入n个数字排序,请问,C语言能人请进,用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说...

    导航:网站首页 > 请问,C语言能人请进,用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说 时间:2016-12-18 用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说思 ...

  3. 用JAVA写一个画图小程序(JAVA 大作业)

    第一次写博客 且是稍微大点的程序 看看就行 重新写的在这,更加清晰明了:点击进入:用JAVA写一个画图小程序(JAVA 大作业)重排版本 设计思路 首先我直接去了Windows自带画图程序去实践模拟, ...

  4. 利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序

    利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序 前面两篇文章已经介绍过 tap/tun 的原理和配置工具.这篇文章通过一个编程示例来深入了解 tap/tun 的程序结构. ...

  5. 面试必问:用 Java 写一个内存泄漏程序

    编译:ImportNew/唐尤华 原文链接:stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java 问题: 刚参加的一 ...

  6. python学习(10)字典学习,写一个三级菜单程序

    学习了字典的应用.按老师的要求写一个三级菜单程序. 三级菜单程序需求如下: 1.深圳市的区--街道--社区---小区4级 2.建立一个字典,把各级区域都装进字典里 3.用户可以从1级进入2级再进入3级 ...

  7. python编写木马攻击_用Python写一个自动木马程序

    电脑作为大家日常办公的工具,最怕的一件事情之一就是被偷,当我们的电脑被盗的时候,不仅仅是电脑本身,更重要的是电脑存储的资料都会丢失.如何尽快的找回电脑需要我们想点办法,今天就教大家一个好的技巧,虽说不 ...

  8. 手把手教你写一个微信小程序日历组件

    今天我们一起写一个微信小程序日历组件 微信小程序日历组件 github.com/749264345/w- 好,我们先看一下要实现的模样,如下图 由以上截图我们可以看到 1.日历可以通过按钮[切换展示效 ...

  9. 用爬虫写一个,小说下载程序

    用爬虫写一个,小说下载程序 环境:python 3.7.3 没啥难度和技术含量,随便写写.本来程序有部分可用format进行优化,但又想了想小说名可能还会 有一些奇奇怪怪的符号,就没弄了. impor ...

  10. 用微信开发者小程序写一个加法计算器小程序

    文章目录 前言 一.calculator.wxml代码 二.calculator.js代码 结果 前言 提示:用软件微信开发者小程序写一个加法计算器小程序 一.calculator.wxml代码 &l ...

最新文章

  1. CSS实现超过一定的宽度添加省略
  2. python的数字比较好_说说 Python3 中的数字处理
  3. 关于js对象引用的小例子
  4. Aspose.Cells使用总结大全
  5. modbus协议手册_20种PLC元件编号和Modbus编号地址对应表
  6. 操作系统系列题型分析(更新中~)
  7. Android 系统(165)---在apns-conf文件中配置一个read_only字段,使APN不可被编辑
  8. SQL Server 时间、日期函数
  9. 【矩阵论】线性空间与线性变换(2)
  10. 7个可以改变一生的自学网站,每天3小时,效果直线上升!
  11. iThoughtsX for mac(优秀的思维导图软件)
  12. 计算机中存储数据最小的单位是什么,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
  13. RGB图像之灰度级和通道的理解(矩阵含义等)
  14. Ubuntu安装eigen
  15. 用Vue+Node从零开始实现拼多多前后端商城项目 — 记录踩坑之旅(上篇)
  16. 网络攻防之dns劫持与网页挂马(实测)
  17. matlab 随机数产生
  18. 仿链家地图找房的简单实现 1
  19. java笔记10-多态
  20. 分享111个JS文字特效,总有一款适合您

热门文章

  1. 中南大学计算机学院羽毛球赛,“羽你同行”交通院第六届师生羽毛球赛圆满举办...
  2. android listview settag,Android View中setTag的二三事
  3. std::setprecision、std::ios::fixed使用说明
  4. 在保护继承中基类的共有成员_C++学习大纲:继承方式的调整
  5. 吉林省统考计算机英语作文,2019年吉林省学位英语作文必背范文(我最……的题材) - 希赛网...
  6. tms脚本演示代码之一
  7. JS获取当前时间date()的用法
  8. Nginx代理webSocket经常中断的解决方案, 如何保持长连接
  9. 数据库同步和数据库复制技术分析
  10. PayPal Agility with Stability On OpenStack