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 ...
随机推荐
- python3.5安装pycrypto
在python中使用AES加密是一种有效的加密方式,如果你研究过微信公众号api就会发现,它也用的是这个加密的.在写代码的时候,要安装crypto模块,在linux或者mac上都好说,但是在windo ...
- PHP检测json格式数据
首先要记住json_encode返回的是字符串, 而json_decode返回的是对象 判断数据不是JSON格式: 复制代码代码如下: function is_not_json($str){ ...
- 四道JavaScript面试题检测你的js基本功
下面有四道简短的JavaScript小脚本,如果你能顺利预测脚本的运行结果,那么你的JavaScript基本功还是可以的.如果答错了,可以相应地去补一下缺漏的知识.反正也很简单,答错了只是说明你没了解 ...
- [HNOI2010] 弹飞绵羊 (分块)
[HNOI2010] 弹飞绵羊 题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上 ...
- Codeforces Round #514 (Div. 2):D. Nature Reserve(二分+数学)
D. Nature Reserve 题目链接:https://codeforces.com/contest/1059/problem/D 题意: 在二维坐标平面上给出n个数的点,现在要求一个圆,能够容 ...
- Mac 访问隐藏文件方法! 网上方法在我电脑上都不可用!
百度的方法: 如果你想打开整个系统的隐藏文件可以在终端下输入以下命令 defaults write com.apple.finder AppleShowAllFiles -bool true 关闭显示 ...
- linux部署j2eeweb工程涉及到的指令
1.查看java进程: ps -e | grep java; 可以获取到java进程的进程号. 或: ps -ef | grep java; 可以查看到详细的进程信息 2.杀死java进程 kill ...
- ZJOI2002 昂贵的聘礼
题目描述 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金币作为聘礼才答应把女儿嫁给他.探险家拿不出这么多金币,便请 ...
- Java 异常(Java Exception)
Java异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的众多子类 ...
- activemq依赖包获取
现在项目中使用的是activemq-all.jar的jar,17M多,里面集成了日志.spring等相关的包.但项目启动时发现系统使用的是activemq包中的日志实现,没有用本项目的日志包.只能将整 ...