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 ...
随机推荐
- Redis之数据备份与恢复
Redis 数据备份与恢复 Redis SAVE 命令用于创建当前数据库的备份. 语法 redis Save 命令基本语法如下: redis 127.0.0.1:6379> SAVE 实例 re ...
- 51Nod 1557 两个集合(二分)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1557 题意: 小X有n个互不相同的整数: p1,p2,...,pn .他 ...
- DDMS
DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务
- 100W数据,测试复合索引
复合索引不是那么容易被catch到的. 两个查询条件都是等于的时候,才会被catch到. mysql> select count(*) from tf_user_index where sex ...
- Mysql语句转义
String sqlStr = "SELECT * FROM t_sys_dic WHERE idPath LIKE" + "'" + "/19/20 ...
- BeginInit与EndInit的实践总结
在项目中,遇到这种情况,总结随便如下: 初始化时:添加操作,BeginInit{flag=true} 警情是一条条加入的,全部都加入后,图表再一次性生成 EndInit{flag=false} ...
- c#在winform中用DataGridView实现分页效果
public partial class Form11 : Form { public Form11() { InitializeComponent(); } private int Inum = 1 ...
- LeetCode 48
这种方法首先对原数组取其转置矩阵,然后把每行的数字翻转可得到结果,如下所示(其中蓝色数字表示翻转轴): 1 2 3 1 4 7 7 4 1 4 5 6 --> 2 5 ...
- hdu——过山车(二分图,匈牙利算法)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Linux修改字符集
set NLS_LANG=american_america.AL32UTF8-----Linux下查看及更改oracle字符集编码[root@OracleDB ~]# cd /usr/local/or ...