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我的这一系列文章,虽然说现在这种 ...
随机推荐
- <转>泛型的内部原理:类型擦除以及类型擦除带来的问题
参考:java核心技术 一.Java泛型的实现方法:类型擦除 前面已经说了,Java的泛型是伪泛型.为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉.正确理解泛型概念的首 ...
- HDU 1037 - Keep on Truckin'
没啥可说的... #include <iostream> using namespace std; ; int a,b,c; int main() { while(cin>>a ...
- 启动程序的c++方法
#include <Windows.h> void main() { WinExec( "notepad.exe fitdata.txt", SW_SHOW ); // ...
- git使用前配置
1. git config --global user.name "Trey" 2. git config --global user.email 164355949@qq.com ...
- linux如何ARP嗅探 Linux下嗅探工具Dsniff安装记录
先来下载依赖包 和一些必须要用到的工具 我这里用的是 dsniff-2.3 的版本 wget http://www.monkey.org/~dugsong/dsniff/dsniff-2.3.ta ...
- POJ 2429 GCD & LCM Inverse(Pollard_Rho+dfs)
[题目链接] http://poj.org/problem?id=2429 [题目大意] 给出最大公约数和最小公倍数,满足要求的x和y,且x+y最小 [题解] 我们发现,(x/gcd)*(y/gcd) ...
- poj 1401---求N!末尾0的个数,2的个数一定比5多,观察得来,0的产生即为2*5,去找这个阶乘一行里面5的个数即可
#include<stdio.h> #include<stdlib.h> int main() { int T,N; while(scanf("%d",&a ...
- andengine游戏引擎总结进阶篇2
本篇包括瓦片地图,物理系统, 1瓦片地图 超级玛丽,冒险岛,魂斗罗等游戏主场景都有瓦片地图画成,它的作用可见一斑,它可以用tiled Qt软件画成,在辅助篇中讲讲解tiled Qt软件的使用 1)加载 ...
- windows编程之菜单操作
分清几个概念 <1>"主菜单" 和 "顶层菜单" 是一个意思. <2>主菜单中的项目叫做 "弹出菜单" 或者 &qu ...
- <memory> is not a BOMStorage file
解决 Autoresizing 和AutoLayout 冲突 设置 self.autoresizingMask = UIViewAutoresizingNone;