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 ...
随机推荐
- JS+Canvas的棋盘游戏和Java的动态结合
二维数组的题做了有几个了,感觉很有趣,随后想到想做一个五子棋的游戏. 因为前端知识匮乏,但感觉只是Java中去用二维数组做的话还是不太难的. 首先生成15*15的棋盘,(先不考虑前后端交互),其后Ha ...
- 配置github的SSH key及GitHub项目上传方式一——使用终端命令行
GitHub是一个开源的大仓库,我们经常从github上下载项目进行学习和研究,下面是一个完整的步骤——往GitHub上传一个新项目. 一.注册GitHub账号 1.注册GitHub账号,地址:htt ...
- 【转】IntelliJ IDEA的光芒会盖过Eclipse吗
作为一个资深的Eclipse用户,我想对IntelliJ IDEA做一个更为严谨的审视.JetBrains的工作人员非常的友善,并为Podcastpedia.org和Codingpedia.org这两 ...
- hdu4965矩阵快速幂
这题不能直接按常规做啊,因为数组根本就开不下,转换思维A(B*A)^(n*n-1)B 这样的话数组B*A就是10*10了,然后快速幂就行了 刚开始数组都开小了,tle,还找了半天bug...还有就是定 ...
- db2时间函数
获取当前日期: select current date from sysibm.sysdummy1; values current date; --获取当前时间 select current time ...
- 16Aspx源码论坛
16Aspx源码论坛: http://bbs.16aspx.com/index.aspx
- IP地址分配机构
IP地址分配机构 全球ip地址分配机构 互联网编号分配机构(IANA,Internet Assigned Numbers Authority)负责分配和规划IP地址,以及对TCP/UDP公共服务的端口 ...
- Mac iStat Menu 注册码
9185-4915-3252-3716-0000 1574-5977-7956-8062-0000 6015-5448-3282-4975-0000 9665-5955-6856-2071-0000 ...
- 『转』Panda Antivirus Pro 2014 – 免费6个月
Panda Antivirus Pro 2014 为您的计算机提供了最简单的使用和最直观的保护.最近,Panda公司和 softonic公司合作推出免费半年版本活动地址:点此进入点击“Kostenlo ...
- Custom Ribbon in SharePoint 2010 & which not wrok when migrate from 2010 to 2013
博客地址 http://blog.csdn.net/foxdave 1. First of all, let me show you the ribbon modal in our project w ...