socket实现udp与tcp通信-java
1.简单介绍Socket
Socket套接字
网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
通信的两端都有Socket。
网络通信其实就是Socket间的通信。
数据在两个Socket间通过IO流传输。
Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。
2.实现UDP通信
发送Send
- 创建DatagramSocket,随机端口号
- 创建DatagramPacket,指定数据、长度、地址、端口
- 使用DatagramSocket发送DatagramPacket
- 关闭DatagramSocket
接收Receive
- 创建DatagramSocket,指定端口号
- 创建DatagramPacket,指定数组、长度
- 使用DatagramSocket接收DatagramPacket
- 关闭DatagramSocket
- 从DatagramPacket中获取数据
示例:(发送)
public class Send {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket();
Scanner sc = new Scanner(System.in);
while (true){
System.out.println("请输入要发送的内容:");
String line = sc.nextLine();
if ("quit".equals(line)){
break;
}
DatagramPacket packet =
new DatagramPacket(line.getBytes(),line.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);
socket.send(packet);
}
socket.close();
}
}
示例:(接收)
public class Receive {
public static void main(String[] args) throws IOException {
DatagramSocket socket = new DatagramSocket(6666);
DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
while (true){
socket.receive(packet);
byte[] arr = packet.getData(); // 获取数据
int len = packet.getLength(); // 获取有效的字节个数
String ip = packet.getAddress().getHostAddress(); // 获取ip地址
int port = packet.getPort(); // 获取端口号
System.out.println(ip + ":" + port + ":" + new String(arr,0,len));
}
}
}
示例:(多线程实现同时收发)
public class Demo {
public static void main(String[] args) {
new Recevice().start();
new SendDemo().start();
}
}
class SendDemo extends Thread{
@Override
public void run(){
try {
DatagramSocket socket = new DatagramSocket();
Scanner sc = new Scanner(System.in);
while (true){
String line = sc.nextLine();
if ("quit".equals(line)){
break;
}
DatagramPacket packet =
new DatagramPacket(line.getBytes(),line.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);
socket.send(packet);
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
class Recevice extends Thread{
@Override
public void run(){
try {
DatagramSocket socket = new DatagramSocket(6666);
DatagramPacket packet = new DatagramPacket(new byte[1024],1024);
while (true){
socket.receive(packet);
byte[] arr = packet.getData(); // 获取数据
int len = packet.getLength(); // 获取有效的字节个数
String ip = packet.getAddress().getHostAddress(); // 获取ip地址
int port = packet.getPort(); // 获取端口号
System.out.println(ip + ":" + port + ":" + new String(arr,0,len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.实现TCP通信
客户端Client
- 创建Socket连接服务端(指定ip地址,端口号),通过ip地址找对应的服务器
- 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
- 输入流可以读取服务端输出流写出的数据
- 输出流可以写出数据到服务端的输入流
服务端Server
- 创建ServerSocket(port)
- 调用ServerSocket的aceept()方法接收一个客户端请求,得到一个Socket
- 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
- 输入流可以读取客户端输出流写出的数据
- 输出流可以写出数据到客户端的输入流
示例:(客户端)
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("127.0.0.1",4896);
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 读取服务器发过来的数据
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr,0,len));
// 发送数据给服务器
os.write("发送给服务器的数据".getBytes());
socket.close();
}
}
示例:(服务端)
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(4896);
while (true) {
Socket socket = server.accept();
new Thread() {
@Override
public void run(){
try {
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 发送数据给客户端
os.write("发送给客户端的数据".getBytes());
//读取客户端发送过来的信息
byte[] arr = new byte[1024];
int len = is.read(arr);
System.out.println(new String(arr,0,len));
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}
socket实现udp与tcp通信-java的更多相关文章
- socket 、 udp 和 tcp
强调一点: socket . udp . tcp之间的区别. socket只是一种套接字,就是两台电脑两端的东西,中间传输以流的格式进行. IBEO好像是TCP/IP , 无论对于TCP和UDP, ...
- Socket编程:UDP和TCP概论及案例
网络编程的三要素: 1.IP地址 2.端口 3.协议 什么是Socket? Socket就是通信链路的端点称"套接词". 基于TCP协议的Socket网络通信: 用来实现双向安全 ...
- 初识-----基于Socket的UDP和TCP编程及测试代码
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- 基于Socket的UDP和TCP编程介绍
一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...
- Windows Socket的UDP和TCP编程介绍
1:网络中进程之间如何通信 为了实现进程之间通信,首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中则是行不通的,其实TCP/IP协议族已经帮我们解决了这个 ...
- python | 网络编程(socket、udp、tcp)
一.套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑.手机等设备之间收发数据) 1.2 分类:udp.tcp 1.3 创建 socket import socket socke ...
- udp和tcp通信
一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子
- python3(socket 实现udp,tcp套接字编程)
#coding=utf-8 #客户端程序TCP 连接 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connec ...
- Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)
不要害怕困难,这是你进步的机会! 读完本文你将了解: OSI 七层网络模型 TCPIP 四层模型 TCP 协议 TCP 的三次握手 TCP 的四次挥手 UDP 协议 Socket 简介 Socket ...
随机推荐
- 【BZOJ5301】【CQOI2018】异或序列(莫队)
[BZOJ5301][CQOI2018]异或序列(莫队) 题面 BZOJ 洛谷 Description 已知一个长度为 n 的整数数列 a[1],a[2],-,a[n] ,给定查询参数 l.r ,问在 ...
- 洛谷 P2024 [NOI2001]食物链 解题报告
P2024 [NOI2001]食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个 ...
- CodeForces - 50A Domino piling (贪心+递归)
CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...
- HDOJ.2187 悼念512汶川大地震遇难同胞——老人是真饿了(贪心)
悼念512汶川大地震遇难同胞--老人是真饿了 点我挑战题目 题目分析 每组数据给出所拥有的钱数,和大米的种类.每种大米给出单价(每单位重量)和大米的重量.求能买到的大米最大重量是多少? 采用贪心算法. ...
- 放弃采用Mycat的条件
Mycat::一个新颖的数据库中间件产品 设计使用Mycat时: 满足以下任意一条,请考虑放弃使用MyCat 有非分片字段查询 有分页排序 进行表JOIN操作,除非要确保两个表的关联字段具有相同的数据 ...
- MySQL基础原创笔记(一)
对表的增删改操作: 创建表: create table student ( id int primary key auto_increment, name ...
- 51nod1199:Money out of Thin Air(线段树)
按dfs序一个一个加入线段树,可以让任何一颗子树的节点在线段树中连续,于是就可以用线段树维护整棵树了 和树剖的思想是一样的,大概一眼就看出来了,但是写了两个半天(躺 总结:记住以后写完数据结构或者数字 ...
- ubuntu14.04安装GTX 1080 ti遇到黑屏问题
实验室给我配置了一个1080ti的卡,那个激动,windows下1000+的FPS,跑分40W,无敌,言归正传,ubuntu14.04下配nvidia 1080的驱动还是出现了很多问题,差点就要重装系 ...
- jsp链接sql数据库
Connection 参数//这个参数用来执行链接数据库的操作 String 参数2="com.microsoft.sqlserver.jdbc.SQLServerDriver"; ...
- SQL Server 代理(已禁用代理 XP)
sp_configure 'show advanced options', 1; GO RECONFIGURE WITH OVERRIDE; GO sp_configure 'Agent XPs', ...