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的更多相关文章

  1. socket 、 udp 和 tcp

    强调一点: socket . udp . tcp之间的区别. socket只是一种套接字,就是两台电脑两端的东西,中间传输以流的格式进行.  IBEO好像是TCP/IP ,  无论对于TCP和UDP, ...

  2. Socket编程:UDP和TCP概论及案例

    网络编程的三要素: 1.IP地址  2.端口 3.协议 什么是Socket? Socket就是通信链路的端点称"套接词". 基于TCP协议的Socket网络通信: 用来实现双向安全 ...

  3. 初识-----基于Socket的UDP和TCP编程及测试代码

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  4. 基于Socket的UDP和TCP编程介绍

    一.概述 TCP(传输控制协议)和UDP(用户数据报协议是网络体系结构TCP/IP模型中传输层一层中的两个不同的通信协议. TCP:传输控制协议,一种面向连接的协议,给用户进程提供可靠的全双工的字节流 ...

  5. Windows Socket的UDP和TCP编程介绍

    1:网络中进程之间如何通信 为了实现进程之间通信,首要解决的问题是如何唯一标识一个进程,在本地可以通过进程PID来唯一标识一个进程,但是在网络中则是行不通的,其实TCP/IP协议族已经帮我们解决了这个 ...

  6. python | 网络编程(socket、udp、tcp)

    一.套接字 socket 1.1 作用:实现不同主机间的进程间通信(不同电脑.手机等设备之间收发数据) 1.2 分类:udp.tcp 1.3 创建 socket import socket socke ...

  7. udp和tcp通信

    一.参考文档 1.从UDP的”连接性”说起–告知你不为人知的UDP 2.Linux UDP通信例子

  8. python3(socket 实现udp,tcp套接字编程)

    #coding=utf-8 #客户端程序TCP 连接 import socket s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connec ...

  9. Android 进阶12:进程通信之 Socket (顺便回顾 TCP UDP)

    不要害怕困难,这是你进步的机会! 读完本文你将了解: OSI 七层网络模型 TCPIP 四层模型 TCP 协议 TCP 的三次握手 TCP 的四次挥手 UDP 协议 Socket 简介 Socket ...

随机推荐

  1. BZOJ2730:[HNOI2012]矿场搭建——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=2730 https://www.luogu.org/problemnew/show/P3225 听说 ...

  2. CF549H:Degenerate Matrix ——题解

    https://vjudge.net/problem/CodeForces-549H ———————————————————————— 题目大意:给一个矩阵,每个数可以加任意的数使得该矩阵为退化矩阵( ...

  3. AOJ. 数组训练.2016-11-17

    A题 #include <stdio.h> #include <stdlib.h> #define max 1000 __int64 a[max] = {0,1,1}; int ...

  4. Codeforces 864E Fire(背包DP)

    背包DP,决策的时候记一下 jc[i][j]=1 表示第i个物品容量为j的时候要选,输出方案的时候倒推就好了 #include<iostream> #include<cstdlib& ...

  5. floor ceil

    echo floor(11/10); echo ceil(11/10); swiper  可以用在ajax的success中,如果用ejs拼接的,放ajax里面才可以轮播

  6. kafka命令总结

    ./kafka-console-consumer.sh  --bootstrap-server IP:9092  --topic user-asset-change-v1 --partition 2  ...

  7. Flask从入门到放弃1:路由app.route()

    Flask从入门到放弃1: Flask中的路由app.route(): 参考来源:http://python.jobbole.com/80956/ https://www.raspberrypi.or ...

  8. 【51NOD-0】1049 最大子段和

    [算法]DP [题解]开long long…… #include<cstdio> #include<algorithm> #include<cstring> usi ...

  9. 【HDU】3068 最长回文

    [算法]manacher [题解][算法]字符串 #include<cstdio> #include<algorithm> #include<cstring> us ...

  10. 【BZOJ】1588: [HNOI2002]营业额统计

    [算法]平衡树(treap)||双向链表 [题解]treap知识见数据结构. #include<cstdio> #include<algorithm> #include< ...