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 ...
随机推荐
- Maven mybatis-generator自动生成代码
mybatis-generator可以自动生成代码,不管你是否喜欢它生成的代码的风格,它确实有助于我们更快速便捷的生成代码. Maven pom文件配置: <build> <plug ...
- Ubuntu 安装 Telnet
参考:在 ubuntu 上安裝 telnet service 1.安装: sudo apt-get install xinetd telnetd 2.修改inetd.conf: vim /etc/in ...
- 解决Error: ENOENT: no such file or directory, scandir 安装node-sass报错
新项目开发需要安装依赖,但是安装完之后通过gulp运行项目,产生了一下的报错: 解决方案是执行一些方法: npm rebuild node-sass 可是有时就是网络问题导致上面命令安装失败,查下失败 ...
- SpringBoot在启动时的多环境配置以及加载顺序
通常我们在开发完成一个SpringBoot项目时,总是要打包部署的. 在启动SpringBoot应用时,我们常常会使用命令java -jar xxx.jar来启动这个服务. 命令java -jar 除 ...
- Spring之核心容器bean
摘要:Spring的核心容器实现了Ioc,其目 的是提供一种无侵入式的框架.在本文中,首先讲解了Spring的基础bean的相关知识,然后介绍了Spring是如何对bean进行管理的. 在Spring ...
- 代码注释,神兽护体,代码无bug
/** * * ━━━━━━神兽出没━━━━━━ * ┏┓ ┏┓ * ┏┛┻━━━┛┻┓ * ┃ ┃ * ┃ ━ ┃ * ┃ ┳┛ ┗┳ ┃ * ┃ ┃ * ┃ ┻ ┃ * ┃ ┃ * ┗━┓ ┏━┛ ...
- UriComponentsBuilder和UriComponents url编码
Spring MVC 提供了一种机制,可以构造和编码URI -- 使用UriComponentsBuilder和UriComponents. 功能相当于 urlencode()函数,对url进行编码, ...
- PHP--------微信网页开发实现微信扫码功能
今天说说微商城项目中用到的扫一扫这个功能,分享一下,希望对各位有所帮助. 前提:要有公众号,和通过微信认证,绑定域名,得到相应信息,appid,appsecret等. 微信开发文档:https://m ...
- ZOJ-3962-数位dp
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5594 16进制下的数位dp,由于固定了位数,可以出现前 ...
- a标记无效问题
当在<a href=''></a>这个标记中嵌入<td></td> 就会导致部分浏览器无法单击,所以在开发HTML页面的时候,一定不要在 a标记中嵌入 ...