java之网络编程

本文介绍Java网络编程的基础概念,包括IP地址、端口号和协议等网络编程三要素,并详细讲解了UDP传输的基本原理及其实现方式,同时提供了多线程环境下UDP传输的应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java之网络编程

一、网络编程三要素

1,IP概述

        * 每个设备在网络中的唯一标识
        * 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。 
        * ipconfig:查看本机IP192.168.12.42
        * ping:测试连接192.168.40.62
        * 本地回路地址:127.0.0.1 255.255.255.255是广播地址

2,端口号

* 每个程序在设备上的唯一标识
* 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。
* 端口号范围从0-65535
* 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
* 常用端口
        * mysql: 3306
        * oracle: 1521
        * web: 80
        * tomcat: 8080
        * QQ: 4000

3,协议

* 为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
* UDP
* 面向无连接,数据不安全,速度快。不区分客户端与服务端。
* TCP
        * 面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。
        * 三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据

*Socket套接字概述:

        * 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
* 通信的两端都有Socket。
* 网络通信其实就是Socket间的通信。
* 数据在两个Socket间通过IO流传输。
* Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。

二、UDP传输

* 1.发送Send

* 创建DatagramSocket, 随机端口号
* 创建DatagramPacket, 指定数据, 长度, 地址, 端口
* 使用DatagramSocket发送DatagramPacket
* 关闭DatagramSocket

* 2.接收Receive

* 创建DatagramSocket, 指定端口号
* 创建DatagramPacket, 指定数组, 长度
* 使用DatagramSocket接收DatagramPacket
* 关闭DatagramSocket
* 从DatagramPacket中获取数据

* 3.接收方获取ip和端口号

* String ip = packet.getAddress().getHostAddress();

* int port = packet.getPort();

用法示例:

 Java Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
* 接收端Receive

        DatagramSocket socket = new DatagramSocket(6666);                       //创建socket相当于创建码头
        DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);       //创建packet相当于创建集装箱
        
        
while(true) {
            socket.receive(packet);                                             
//接收货物
            byte[] arr = packet.getData();
            
int len = packet.getLength();
            
String ip = packet.getAddress().getHostAddress();
            System.out.println(ip + 
":" + new String(arr,0,len));
        }
* 发送端Send

        DatagramSocket socket = 
new DatagramSocket();       //创建socket相当于创建码头
        Scanner sc = new Scanner(System.in);
        
while(true) {
            
String str = sc.nextLine();
            
if("quit".equals(str))
                
break;
            DatagramPacket packet =                    
//创建packet相当于创建集装箱
                    new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
            socket.send(packet);            
//发货
        }
        socket.close();

三、UDP传输多线程

 Java Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class Demo3_MoreThread {

            
public static void main(String[] args) {
                
new Receive().start();
                
new Send().start();
            }
        }
        
class Receive extends Thread {
            
public void run() {
                
try {
                    DatagramSocket socket = 
new DatagramSocket(6666);       //创建socket相当于创建码头
                    DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);   //创建packet相当于创建集装箱
                    
                    
while(true) {
                        socket.receive(packet);                      
//接收货物
                        byte[] arr = packet.getData();
                        
int len = packet.getLength();
                        
String ip = packet.getAddress().getHostAddress();
                        System.out.println(ip + 
":" + new String(arr,0,len));
                    }
                } 
catch (IOException e) {
            
                    e.printStackTrace();
                }
            }
        }

        
class Send extends Thread {
            
public void run() {
                
try {
                    DatagramSocket socket = 
new DatagramSocket();       //创建socket相当于创建码头
                    Scanner sc = new Scanner(System.in);
                    
                    
while(true) {
                        
String str = sc.nextLine();
                        
if("quit".equals(str))
                            
break;
                        DatagramPacket packet =           
//创建packet相当于创建集装箱
                                new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);
                        socket.send(packet);            
//发货
                    }
                    socket.close();
                }  
catch (IOException e) {
                    
                    e.printStackTrace();
                }
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值