Java 基于UDP的类似于QQ的循环通信
package Day10; import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.util.Scanner; /**
* 聊天消息接受者
* @author Administrator
*
*/
class Receiver implements Runnable {
public void run() {
DatagramSocket ds = null;
try {
/**
* 创建接收端
* 1、DatagramSocket(int port)
* 构造一个数据报套接字绑定到本地主机上的指定端口。
*/
ds = new DatagramSocket(12345); while(true) {
// 接收数据包
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
ds.receive(dp);
// 获取接收到的数据包的信息
/**
* 1、InetAddress类型 getAddress()
* 返回机器的IP地址的数据报发送或者接收的数据报。 (数据报二进制)
* 2、getHostAddress()
* 返回的IP地址字符串的文本表示。
*
*/
String msg = new String(data, 0, dp.getLength());
String ip = dp.getAddress().getHostAddress();
//int port = dp.getPort(); System.err.println(ip + msg); } }catch(Exception e) {
e.getStackTrace();
}finally {
// 关闭套接字
if(ds != null)
ds.close();
}
}
}
/**
* 聊天消息发送者
* @author Administrator
*
*/
class Sender implements Runnable{ Scanner s = null;
DatagramSocket ds = null;
@Override
public void run() {
try {
// 创建发送端
ds = new DatagramSocket();
// 设置端口和ip
int port = 12345;
String ip = "172.180.8.50";
// 创建控制台扫描器
s = new Scanner(System.in);
while(true) {
// 读取控制台信息
// System.out.println("--------没有格式,直接输入--------");
String str = "cjj: "+ s.nextLine();
byte[] msg = str.getBytes();
/**
* 发送数据
* 1、InetSocketAddress(InetAddress addr, int port)
* 创建一个套接字地址的IP地址和端口号。
* 2、 getSocketAddress()
* 得到了SocketAddress(通常是IP地址+端口号)都的远程主机,这包被发送到或来自。
* 3、send(DatagramPacket p)
* 从这个套接字发送一个数据报包。
*/
DatagramPacket dp = new DatagramPacket(msg, msg.length);
dp.setSocketAddress(new InetSocketAddress(ip , port));
ds.send(dp);
} }catch(Exception e) {
e.getStackTrace(); }finally {
if(ds != null)
ds.close();
if(s != null)
s.close();
}
}
} public class QQ {
public static void main(String[] args) throws Exception {
new Thread(new Sender()).start();
new Thread(new Receiver()).start();
}
}
package QQ; import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.util.Scanner; public class QQ1 { public static void main(String[] args) {
new Thread(new Sender()).start();
new Thread(new Receiver()).start();
} } class Sender implements Runnable {
@Override
public void run() {
Scanner sc = new Scanner(System.in);
DatagramSocket ds = null;
try {
ds = new DatagramSocket();
while (true) {
System.out.print("请输入发送的内容 :");
String str = sc.nextLine();
DatagramPacket dp = new DatagramPacket(str.getBytes(), str.getBytes().length);
dp.setSocketAddress(new InetSocketAddress("172.180.8.50", 12345));
ds.send(dp);
System.out.println();
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null)
ds.close();
if (sc != null)
sc.close();
}
}
} class Receiver implements Runnable { @Override
public void run() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(12345);
while (true) {
byte[] data = new byte[1024];
DatagramPacket dp = new DatagramPacket(data, data.length);
ds.receive(dp);
String str = new String(data, 0, dp.getLength());
String ip = dp.getAddress().getHostAddress();
int port = dp.getPort();
System.err.println("老刘:" + str);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ds != null) {
ds.close();
}
}
}
}
Java 基于UDP的类似于QQ的循环通信的更多相关文章
- python 之 网络编程(基于UDP协议的套接字通信)
8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...
- [java]基于UDP的Socket通信Demo
java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过 ...
- java基于udp实现键盘录入聊天
发送端 package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Data ...
- 实验09——java基于TCP实现客户端与服务端通信
TCP通信 需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手 底层通过 流 发送数据 数据没有大小限制 可靠的传输机制 - 丢包重发 包的顺序的 ...
- 基于udp协议的套接字通信
服务端: import socket server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(('127.0.0.1',8 ...
- 基于java mail实现简单的QQ邮箱发送邮件
刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...
- Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信
Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...
- java Socket编程-基于UDP
package com.wzy.UDPTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java ...
- JAVA基础知识之网络编程——-基于UDP协议的通信例子
UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...
随机推荐
- Python学习札记(三十七) 面向对象编程 Object Oriented Program 8 @property
参考:@property NOTE 1.在绑定参数时,为了避免对属性不符合逻辑的操作,需要对传入的参数进行审核. #!/usr/bin/env python3 class MyClass(object ...
- python 字典获取最大和最小的value
my_dict = {, , } key_max = max(my_dict.keys(), key=(lambda k: my_dict[k])) key_min = min(my_dict.key ...
- 定义 S4 类
S3 类仅用一个字符向量表示,与之不同的是,S4 类要求对类和方法有正式定义.为了定义一个 S4 类,我们需要调用 setClass( ),并提供一种类成员的表示,这种表示被称为字段(slots).通 ...
- Mediator(中介者)
意图: 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 适用性: 一组对象以定义良好但是复杂的方式进行通信.产生的相互依 ...
- 在触发器中,当“IsMouseOver”属性=true时,设置当前控件的高亮选中效果
<Style.Triggers> <!--<Trigger Property="IsSelected" Value="Tru ...
- Linux命令详解-whatis
描述一个命令执行什么功能. 1.命令格式: whatis [ -M PathName ] Command ... 2.命令功能: 描述一个命令执行什么功能. 3.命令参数: -M PathNa ...
- Appium 自动化测试(9) -- 在Uiautomator中查看webview元素
在uiautomator中,直接查看不到webview中的元素,不知道大家遇到过没有?如下 解决方法如下: step0:将uiautomator关闭 step1:在appium 中,设置Android ...
- python爬虫脚本下载YouTube视频
python爬虫脚本下载YouTube视频 爬虫 python YouTube视频 工作环境: python 2.7.13 pip lxml, 安装 pip install lxml,主要用xpath ...
- hdu 4845 状压bfs(分层思想)
拯救大兵瑞恩 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- UVA-1152 4 Values whose Sum is 0 (二分)
题目大意:在4个都有n个元素的集合中,每个集合选出一个元素,使得4个数和为0.问有几种方案. 题目分析:二分.任选两组求和,剩下两组求和,枚举第一组中每一个和sum,在第二组和中查找-sum的个数,累 ...