问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

在linux下如何用c语言来写一个socket编程的聊天小程序

发布网友 发布时间:2022-04-30 20:33

我来回答

2个回答

热心网友 时间:2022-07-01 13:41

源码如下:
//chat_one.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <malloc.h>
#include <sys/select.h>

int main( int argc, char **argv)
{
struct sockaddr_in chatone, chattwo;
char pmsg[1000];
char *buf;
int chatone_fd;
int ret,i;
int len, msg_len;
fd_set fdset;

if ( argc < 2 ){
printf("please input ip address\n");
return -1;
}

printf("server address is %s\n", argv[1]);

chattwo.sin_family = AF_INET;
chattwo.sin_port = htons(60002);
inet_pton(AF_INET, argv[1], &chattwo.sin_addr.s_addr);

chatone.sin_family = AF_INET;
chatone.sin_port = htons(60000);
chatone.sin_addr.s_addr = INADDR_ANY;

chatone_fd = socket(PF_INET, SOCK_DGRAM, 0);
if ( -1 == chatone_fd ){
printf("create socket failed %s\n", strerror(errno));
return -1;
}

ret = bind(chatone_fd, (struct sockaddr *)&chatone, sizeof(chatone));
if ( -1 == ret){
printf("bind failed %s \n", strerror(errno));
return -1;
}

for(i=0; i<1000;i++){
FD_ZERO( &fdset );
FD_SET ( 0, &fdset);
FD_SET( chatone_fd, &fdset);

if ( -1 == select ( chatone_fd+1, &fdset, NULL, NULL, NULL) ){
continue;
}

if ( FD_ISSET( chatone_fd, &fdset)){
recvfrom( chatone_fd, pmsg, 999, 0, NULL, 0);
printf("receive %s\n", pmsg);
}
else{
memset( pmsg, 0, 1000);
fgets(pmsg, 999, stdin);
len = sizeof(chattwo);
sendto( chatone_fd, pmsg, 1000, 0,\
(struct sockaddr*) &chattwo, len);

printf("send %s\n", pmsg);
}
}

printf("sent %d packets\n", i);

close(chatone_fd);
return 0;
}
//chat_two.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <malloc.h>
#include <sys/select.h>

int main( int argc, char **argv)
{
struct sockaddr_in chatone, chattwo;
char pmsg[1000];
char *buf;
int chattwo_fd;
int ret,i;
int len, msg_len;
fd_set fdset;

if ( argc < 2 ){
printf("please input ip address\n");
return -1;
}

printf("server address is %s\n", argv[1]);

chattwo.sin_family = AF_INET;
chattwo.sin_port = htons(60002);
chattwo.sin_addr.s_addr = INADDR_ANY;

chatone.sin_family = AF_INET;
chatone.sin_port = htons(60000);
inet_pton(AF_INET, argv[1], &chatone.sin_addr.s_addr);

chattwo_fd = socket(PF_INET, SOCK_DGRAM, 0);
if ( -1 == chattwo_fd ){
printf("create socket failed %s\n", strerror(errno));
return -1;
}

ret = bind(chattwo_fd, (struct sockaddr *)&chattwo, sizeof(chattwo));
if ( -1 == ret){
printf("bind failed %s \n", strerror(errno));
return -1;
}

for(i=0; i<1000;i++){
FD_ZERO( &fdset );
FD_SET ( 0, &fdset);
FD_SET( chattwo_fd, &fdset);

if ( -1 == select ( chattwo_fd+1, &fdset, NULL, NULL, NULL) ){
continue;
}

if ( FD_ISSET( chattwo_fd, &fdset)){
recvfrom( chattwo_fd, pmsg, 999, 0, NULL, 0);
printf("receive: %s\n", pmsg);
}
else{
memset( pmsg, 0, 1000);
fgets(pmsg, 999, stdin);
len = sizeof(chatone);
sendto( chattwo_fd, pmsg, 1000, 0,\
(struct sockaddr*) &chatone, len);

printf("send %s\n", pmsg);
}
}

printf("sent %d packets\n", i);

close(chattwo_fd);
return 0;
}
编译好这个两个程序就可以进行简单的通信了。

热心网友 时间:2022-07-01 13:41

如何写局域网私聊程序
如何在linux下用c语言编写一个能够发送icmp报文的小程序

需要建立socket,参数是AF_INET,SOCK_RAW,IPPROTO_ICMP 自己构造ICMP数据包, sendto发送给某地址。ICMP有多种,你可以发送type为13的时间戳请求。然后调用recvfrom会收到type为14的timestamp reply的IP包,IP头一般是20 Bytes,里面包含src IP,des IP还有TTL等。IP包的数据就是返回ICMP timestamp ...

想求一个java聊天小程序,使用图形用户界面和socket通讯 功能:可以实现...

使用websocket创建ws服务器,nat123解析一个地址,分配一个端口给他用,发布到外网。客户端拨通地址 登陆 接入websocket服务,心跳机制要做好,上下线掉线更新列表,注册存储用户信息,更新用户列表。客户端可以发起群聊、私聊、收发文件、分享,甚至发送服务器消息,然后反馈消息,响应远程服务事件。这就是一...

如何用java做一个聊天小程序 要求使用图形用户界面,可以实现一个聊天室...

Socket socket=new Socket("127.0.0.1",1680);out=new PrintWriter(socket.getOutputStream(),true);InputStreamReader in = new InputStreamReader(socket.getInputStream());BufferedReader sin=new BufferedReader(in);String s;while(true){ s=sin.readLine();tx.append("#Server Said#: "+...

java网络编程写一个基础的小程序一直提示 java.net.SocketException: sel...

可能是连接语句出错了,好好检查一下细节方面 例如:服务器端需要指定一个确定的端口号来创建创建服务器对象 Socket socket = new Socket("168.150.12.53",9999);并用此端口号进行监听。。Socket s = server.accept() ; // 监听窗口,等待连接 或:Socket socket = new Socket(InetAddress.get...

Windows程序员如何转linux开发

真的要做复杂条件筛选,我的习惯是写个词法分析程序,自己来分析,也花不了多少时间,所以,我一直就没学正则表达式,呵呵。然后是C和C++编程相关,我仔细看了,发现一说到开发,就讲到Linux kernel,这部分显然是操作系统的知识,我仔细想了想,发现自己的问题并没有得到解决。就算我知道了kernel怎么...

java该怎么自学?

自学的困难就是,不知道该从哪里开始,才怎么学,没有一个系统的学习路径,现在黑马程序员最新上线了java学习路线图,非常好的解决了一个难题,可以去搜索看一下。 一、java基础 学习任何一门编程语言,首先要学习的是基础语法,开启Java学习的第一步,当然就是深入掌握计算机基础、编程基础语法,面向对象,集合、IO流、线程...

求推荐一个web前端的学习路线

web前端学习顺序:①计算机基础以及PS基础 ②前端开发基础(HTML5开发、JavaScript基础到高级、jQuery网页特效、Bootstrap框架)③移动开发 ④前端高级开发(ECMAScript6、Veu.js框架开发、webpack、前端页面优化、React框架开发、AngularJS 2.0框架开发等)⑤小程序开发 ⑥全栈开发(MySQL数据库、Python编程语...

安卓开发需要学什么

一、应用程序 Android以Java为编程语言,使接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个 Activity 类负责创建视窗,一个活动中的Activity就是在 foreground(前景)模式,背景运行的程序叫做Service。二、中介软件 操作系统与应用程序的沟通桥梁,并用分为两层:函数层(Library)...

gis好学么

VB是一个很容易上手的语言,通过很短时间的学习,就能做出像模像样的东西,这对于学习GIS二次开发来说是个很不错的工具,编程的难度降低了,可以把重心放在怎么设计开发GIS功能上面去。所以,在学习VB的时候,如果你听说过MO,尝试着用一用,并做一些小程序。你还可以去用VB写一些程序来操作word,excel,cad等,这些东西...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
中国最大的咸水 为什么淘宝下单了,却看不到订单信息呢? 贴纸的胶如何去除 小学英语教研的主题是哪些方面? 笔记本电脑中毒开不了机,按开机键,然后在按F8进入安全模式泽么... 如何去除墙面胶印 ...有些偏高,钙比正常最大值高一倍,锌只是高一点点,请问对 看看台灯的使用频率是多少。是50hz吗。辐射如何 想知道: 成都地铁4号线 西部新城西站 在哪?地图标注最好 成都市地铁4号线西客站在什么位置 linux下socket编程,菜鸟求解。。。 天猫博阁诺旗舰店 的 灯具 好么? 质量如何?他们家是属于什么样式的灯具? 吊灯什么牌子好_吊灯十大品牌都有哪些? 《实战Linux Socket编程》txt全集下载 松下灯具旗舰店官网 求一部韩剧下载,2000年的秘密情人(好像也叫“秘密”),金荷娜主演 刘荷娜还演过什么电影? 宋承宪主演的所有电视剧和电影? 请问那位可以让我知道宋承宪的所有资料? 在异地购首套房,由于开发商违约退房了,现在再在深圳买算首套吗?贷款首付几成? 宠物情人30多分钟的时候,金荷娜大腿夹着张根硕的手的那个动作是在干嘛。。。 男子摇中杭州“红盘”却被告知没有资格购买,究竟是怎么回事? 为什么韩彩英、金荷娜主演的Magzine Allo暂停制作了? 金荷娜几岁了? 杭州租客退租惹纠纷,外出租房时需要注意哪些问题? 杭州李女士付完定金发现房龄老了6岁,她应如何维护自己的合法权益? 关于经济适用房的购买及退房规定,请了解的朋友跟我说下,谢谢了! 请问这个是在欧普照明天猫旗舰店买的灯是真的么? 买了小产权房,签的租赁合同,想退房 求金艺贞全集百度云资源 求linux下的socket 编程 linux下的 socket编程问题! linux下socket编程,多线程问题 关于linux socket编程的问题,在线等!! 求帮助,万分感谢! linux编程socket程序的编译语句 关于linux socket编程的问题 梦见父亲骑自行车比赛中途掉窨井里受伤 梦见街道在自行车比赛,街道两旁人声鼎沸,欢呼声不断? 梦到有人跟我比赛骑自行车,并且超过我还要打我是什么意思 梦见我和别人骑自行车比赛发现我骑的是一只大兔子? 为什么做梦梦到和别人比赛骑自行车,醒了之后发现自己真的很累呢?? 梦见我姨村弄了个自行车比赛有4人参加结果死了3不? 美颜相机照出来是老人的特效 什么相机里的特效 cymera特效相机有什么功能 哪款特效相机可以提照片? 2021年最热门的专业有哪些 特效相机软件哪个好玩 能加特效的相机是什么相机? 男生学什么专业有用,近几年比较热门?
  • 焦点

最新推荐

猜你喜欢

热门推荐