UDP聊天实现(简单版)
两者代码基本一致
关于套接字:
甲方:
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <fcntl.h> int main()
{
int ret = ;
int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(fd < ){
perror("socket");
exit(EXIT_FAILURE);
}
struct sockaddr_in gg;
gg.sin_family = AF_INET;
gg.sin_port = htons();
gg.sin_addr.s_addr = inet_addr("192.168.1.10");
ret = bind(fd, (struct sockaddr *)&gg, );
if(ret < ){
perror("bind");
return ;
}
unsigned char buff[] = {};
unsigned char data[] = {};
struct sockaddr_in mm;
mm.sin_family = AF_INET;
mm.sin_port = htons();
mm.sin_addr.s_addr = inet_addr("192.168.1.10");
int mm_len = ;
while(){
fd_set st;
FD_ZERO(&st);
FD_SET(fd, &st);
FD_SET(, &st);
ret = select(fd+, &st, , , );
if(ret < ){
perror("select");
return ;
}
if(FD_ISSET(fd, &st)){
memset(buff, , );
ret = recvfrom(fd, buff, , , (struct sockaddr *)&mm, &mm_len);
if(ret < ){
perror("recvfrom");
exit(EXIT_FAILURE);
}
printf("gg said :%s", buff);
}
if(FD_ISSET(, &st)){
memset(data, , );
read(, data, );
ret = sendto(fd, data, strlen(data), , (struct sockaddr *)&mm, );
if(ret < ){
perror("sendto");
exit(EXIT_FAILURE);
}
} }
close(fd);
}
乙方:
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <fcntl.h> int main()
{
int ret = ;
int fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(fd < ){
perror("socket");
exit(EXIT_FAILURE);
}
struct sockaddr_in mm;
mm.sin_family = AF_INET;
mm.sin_port = htons();
mm.sin_addr.s_addr = inet_addr("192.168.1.10");
ret = bind(fd, (struct sockaddr *)&mm, );
if(ret < ){
perror("bind");
return ;
}
unsigned char buff[] = {};
unsigned char data[] = {};
struct sockaddr_in gg;
gg.sin_family = AF_INET;
gg.sin_port = htons();
gg.sin_addr.s_addr = inet_addr("192.168.1.10");
int gg_len = ;
while(){
fd_set st;
FD_ZERO(&st);
FD_SET(fd, &st);
FD_SET(, &st);
ret = select(fd+, &st, , , );
if(ret < ){
perror("select");
return ;
}
if(FD_ISSET(fd, &st)){
memset(buff, , );
ret = recvfrom(fd, buff, , , (struct sockaddr * )&gg, &gg_len);
if(ret < ){
perror("recvfrom");
exit(EXIT_FAILURE);
}
printf("mm said :%s", buff);
}
if(FD_ISSET(, &st)){
memset(data, , );
read(, data, );
ret = sendto(fd, data, strlen(data), , (struct sockaddr *)&gg, );
if(ret < ){
perror("sendto");
exit(EXIT_FAILURE);
}
}
}
close(fd);
}
~
UDP聊天实现(简单版)的更多相关文章
- go 聊天室简单版总结
/* * 思路:在登录成功时将用户的id存进在线用户列表中的key value中链接的ws为空,并保存用户的信息. * 当跳转到聊天室时,将用户和聊天室链接的ws存进在线用户列表中的 * 问题:如何在 ...
- 采用tcp协议和UDP协议实现简单的聊天功能
Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义 ...
- python—多任务版udp聊天机器人
将多任务(多线程)引入到udp聊天机器人,可以实现同时发送消息和接收消息 import socket import threading def udp_send(udp_socket,ip,port) ...
- python网络聊天器多线程版
在之前的一篇文章(python网络编程-udp)中实现了一个简单的udp聊天器,只能在单线程下进行收发数据,在学习完多线程之后,实现一个能同时收发数据的udp聊天器. 说明: 编写一个有2个线程的程序 ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- JavaSE项目之聊天室swing版
引子: 当前,互联网 体系结构的参考模型主要有两种,一种是OSI参考模型,另一种是TCP/IP参考模型. 一.OSI参考模型,即开放式通信系统互联参考模型(OSI/RM,Open Systems In ...
- JavaMail简单版实验测试
前言: 最近由于实现web商城的自动发送邮件功能的需求,故涉猎的邮箱协议的内部原理.现将简单版的Java Mail实例做个代码展示,并附上其中可能出现的bug贴出,方便感兴趣的读者进行测试! 1.载入 ...
- 小米抢购(简单版v0.1)-登录并验证抢购权限,以及获取真实抢购地址
小米(简单版)-登录并验证抢购权限,以及获取真实抢购地址! 并不是复制到浏览器就行了的 还得传递所需要的参数 这里只是前部分 后面的自己发挥了 { "stime": 1389 ...
- Java实现简单版SVM
Java实现简单版SVM 近期的图像分类工作要用到latent svm,为了更加深入了解svm,自己动手实现一个简单版的. 之所以说是简单版,由于没实用到拉格朗日,对偶,核函数等等.而 ...
- 三十天学不会TCP,UDP/IP网络编程-UDP,从简单的开始
如果对和程序员有关的计算机网络知识,和对计算机网络方面的编程有兴趣,欢迎去gitbook(https://www.gitbook.com/@rogerzhu/)star我的这一系列文章,虽然说现在这种 ...
随机推荐
- ASP.NET 生命周期(原文翻译)
在网上看到这篇文章,老外写的,里面很多图片挺精致,顺带翻译过来给大家分享下,英语太次好多地方都翻不过来 ASP.NET application and page life cycle Download ...
- C++ Primer之 十二章 类
1.关于类的const对象 const对象只能调用声明为const的成员函数,在这篇csdn博客中也讨论了这个问题. 究其原因是因为 const 对象A 调用了非const函数F, F因为没有cons ...
- BF算法(朴素的模式匹配算法)
#include <stdio.h> #include <stdlib.h> int Index_BF(char S[],char T[])//s为目标串(长串),t为模式串( ...
- 我的DbHelper数据操作类(转)
其实,微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要&q ...
- jquery序列化元素
序列化元素: 做项目的时候,表单是必不可少的,经常用来提交数据,例如注册.登陆等.常规的方法是使表单提交到另外一个页面,整个浏览器都会被刷新,而使用Ajax技术则能够异步地提交表单,并将服务器返回的数 ...
- [Python] 应用kNN算法预测豆瓣电影用户的性别
应用kNN算法预测豆瓣电影用户的性别 摘要 本文认为不同性别的人偏好的电影类型会有所不同,因此进行了此实验.利用较为活跃的274位豆瓣用户最近观看的100部电影,对其类型进行统计,以得到的37种电影类 ...
- CSS左中右布局,规范案例
html部分 <body> <form id="form1" runat="server"> <div id="wrap ...
- coroutine
在脚本语言中,coroutine 不是个新鲜词汇,比如 lua 内建 coroutine,python中的greenlet,但在C程序中,并不是太常见. windows 下有 fiber,相关函数为 ...
- poj3507---去掉最小值和最大值
#include <stdio.h> #include <stdlib.h> int main() { ) { ,max=,min=,t; ; i<; i++) { sc ...
- JQuery(下)
26.jQuery 中的 DOM 操作 )DOM(Document Object Model—文档对象模型):一种与浏览器, 平台, 语言无关的接口, 使用该接口可以轻松地访问页面中所有的标准组件 ) ...