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的循环通信的更多相关文章

  1. python 之 网络编程(基于UDP协议的套接字通信)

    8.5 基于UDP协议的套接字通信 UDP协议:数据报协议 特点:无连接,一发对应一收,先启动哪一端都不会报错 优点:发送效率高,但有效传输的数据量最多为500bytes 缺点:不可靠:发送数据,无需 ...

  2. [java]基于UDP的Socket通信Demo

    java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过 ...

  3. java基于udp实现键盘录入聊天

    发送端 package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Data ...

  4. 实验09——java基于TCP实现客户端与服务端通信

    TCP通信         需要先创建连接 - 并且在创建连接的过程中 需要经过三次握手        底层通过 流 发送数据 数据没有大小限制        可靠的传输机制 - 丢包重发 包的顺序的 ...

  5. 基于udp协议的套接字通信

    服务端: import socket server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(('127.0.0.1',8 ...

  6. 基于java mail实现简单的QQ邮箱发送邮件

    刚学习到java邮件相关的知识,先写下这篇博客,方便以后翻阅学习. -----------------------------第一步 开启SMTP服务 在 QQ 邮箱里的 设置->账户里开启 S ...

  7. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  8. java Socket编程-基于UDP

    package com.wzy.UDPTest; import java.net.DatagramPacket; import java.net.DatagramSocket; import java ...

  9. JAVA基础知识之网络编程——-基于UDP协议的通信例子

    UDP是一种不可靠的协议,它在通信两端各建立一个socket,这两个socket不会建立持久的通信连接,只会单方面向对方发送数据,不检查发送结果. java中基于UDP协议的通信使用DatagramS ...

随机推荐

  1. BZOJ 2763 飞行路线(分层图最短路)题解

    题意:中文题意不解释... 思路:分层图最短路,我们再开一维用来表示当前用了多少次免费次数,dis[i][j]就表示到达i点用了j次免费的最短路,有点DP的感觉. 当个模板用 参考:分层图最短路 代码 ...

  2. HDU 2222 Keywords Search(AC自动机)题解

    题意:给你几个keywords,再给你一段文章,问你keywords出现了几次. 思路:这里就要用到多模匹配算法AC自动机了,AC自动机需要KMP和字典树的知识,匹配时是在字典树上,失配我们就要用到类 ...

  3. Java回顾之反射

    在这一篇文章里,我们关注反射及其相关话题. 反射可以帮助我们查看指定类型中的信息.创建类型的实例,调用类型的方法.我们平时使用框架,例如Spring.EJB.Hibernate等都大量的使用了反射技术 ...

  4. spark + cassandra +postgres +codis 大数据方案

    1.环境: 1.1.cassandra 集群: 用于日志数据存储 1.2.spark集群: 用户后期的实时计算及批处理 1.3.codis 集群: 用于缓存一些基本数据如IP归属地,IP经纬度等,当日 ...

  5. HDU-3853-期望/dp/坑

    LOOPS Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others)Total Sub ...

  6. 基于Oracle的SQL优化(崔华著)-整理笔记-第2章“Oracle里的执行计划”

    详细介绍了Oracle数据里与执行计划有关的各个方面的内容,包括执行计划的含义,加何查看执行计划,如何得到目标SQL真实的执行计划,如何查看执行计划的执行顺序,Oracle数据库里各种常见的执行计划的 ...

  7. Tensorflow学习笔记二

    现在来开始安装Tensorflow吧 Tensorflow有两种模式, 一种GPU支持, 另外一种仅CPU支持 虚拟机仅有CPU支持, 那就第一种模式吧 有4种途径去安装 virtualenv &qu ...

  8. 蓝桥杯练习系统历届试题 带分数 dfs

    问题描述 100 可以表示为带分数的形式:100 = 3 + 69258 / 714. 还可以表示为:100 = 82 + 3546 / 197. 注意特征:带分数中,数字1~9分别出现且只出现一次( ...

  9. 免费一年MAP2014+6个月免费MIS2014

    活动页面:http://promos.mcafee.com/en-us/Affiliates/400/Lp/np2815_mavp.aspx?rfhs=1&LPName=np2815_mavp ...

  10. Http协议——Header说明

    下图是我用IE的开发人员工具截取的一个Http Request请求的Header. 下图是我用IE的开发人员工具截取的一个Http Response的Header. header常用指令 header ...