Java基础---网络编程

本文介绍了网络编程的基本概念,包括IP地址、端口、协议等,并详细阐述了UDP与TCP两种主要协议的特点与应用。同时,提供了基于Java语言实现UDP与TCP通信的具体示例代码。

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

1.网络编程三要素

IP:一个计算机的标识

端口:应用程序都会对应一个端口,用来进行通信,有效端口:0~65535,其中 0~1024系统使用或保留端口。

协议:两种协议(UDP,TCP)

特殊IP地址:127.0.0.1本地回环地址用来做一些本地测试

ping+IP地址; 用来检测本机是否可以和指定的IP地址的计算机可以进行正常通讯

ipconfig 用来查看IP地址

xxx.xxx.xxx.255 广播地址

     端口:

           物理端口:物理设备对应的端口, 网卡口

           逻辑端口:用来标示我们的计算机上的进程,就是上文所说的端口

    协议:

        UDP

            把数据打成一个数据包 , 不需要建立连接

            数据包的大小有限制不能超过64k

            因为无连接,所以属于不可靠协议(可能丢失数据)

            因为无连接 ,所以效率高

        TCP

            需要建立连接,形成连接通道

            数据可以使用连接通道直接进行传输,无大小限制

            因为有链接,所以属于可靠协议

            因为有链接,所以效率低

2.InetAddress类

     A.InetAddress概述:IP地址的描述类,为了方便我们对IP地址的获取和操作,java提供了一个类

  InetAddress 供我们使用,此类表示互联网协议 (IP) 地址。 

     B.InetAddress类的常见功能

          public static InetAddress getByName(String host)( host: 可以是主机名,也可以是IP地址的         字符串表现形式)

          public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。

          public String getHostName()获取此 IP 地址的主机名。 


           //通过主机IP获取inetaddress对象

InetAddress address = InetAddress.getByName(“192.168.20.16”);

//返回 IP 地址字符串(以文本表现形式)

System.out.println(address.getHostAddress());

//获取此 IP 地址的主机名

System.out.println(address.getHostName());

3.UDP协议

   UDP协议:

       UDP通信步骤:

           发送端步骤(客户端):

             A.创建UDP发送数据端Socket对象

             B.创建数据包,并给出数据,把数据打包

             C.通过Socket对象发送数据包 

             D.释放资源

           接收端步骤(服务器端):

             A.创建UDP接收数据端Socket对象

             B.创建一个接收数据的数据包

             C.接收数据,数据在数据包中

             D.解析数据包,并把数据显示在控制台

             E.释放资源

package com.xayd_03;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

// UDP协议接收数据步骤:

// A:创建UDP接收数据端Socket对象

// B:创建一个接收数据的数据包

// C:接收数据,数据在数据包中

// D:解析数据包,并把数据显示在控制台

// E:释放资源

public class udpServer {

public static void main(String[] args) throws Exception {

//创建UDP接收数据端Socket对象

DatagramSocket ds = new DatagramSocket(2222);

//创建一个接收数据的数据包

byte [] bys = new byte [1024];

int len = bys.length;

DatagramPacket dp = new DatagramPacket(bys, len);

//接收数据

while(true){

ds.receive(dp);

//解析数据包,并把数据显示在控制台

byte[] data = dp.getData();

int length = dp.getLength();

System.out.println(new String(data,0,length));

}

}

}

package com.xayd_03;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.util.Scanner;

// UDP发送数据的步骤:

// A:创建UDP发送数据端Socket对象

// B:创建数据包,并给出数据,把数据打包

// C:通过Socket对象发送数据包

// D:释放资源

public class udpClient {

public static void main(String[] args) throws Exception {

//创建udp发送数据端socket对象

DatagramSocket ds = new DatagramSocket();

InetAddress address = InetAddress.getByName(“192.168.20.16”);

int port = 2222;

//创建键盘录入对象

Scanner sc = new Scanner(System.in);

String line;

while((line=sc.nextLine())!=null){

//键盘录入数据

byte [] buf = “hello”.getBytes();

int len = buf.length;

DatagramPacket dp = new DatagramPacket(buf, len, address, port);

//发送数据

ds.send(dp);

}

//释放资源

ds.close();

}

}

4.TCP协议

    TCP协议:

       TCp协议通信步骤:

            发送端(客户端):

               A.创建TCP协议发送端Socket对象,指定服务器IP及端口

               B.获取输出流,并写数据

               C.释放资源



            接收端(服务器端):

               A.创建TCP协议接收端Socket对象

               B.监听客户端连接

               C.获取输入流,并读取数据,显示在控制台

               D.释放资源

package com.xayd_05;

//用TCP协议写一个数据的发送和接收,接收端接收到数据之后给发送端一个反馈

import java.io.OutputStream;

import java.net.Socket;

public class tcpClient {

public static void main(String[] args) throws Exception {

//创建tcp客户端的socket对象

Socket sk = new Socket(“192.168.20.16”,2222);

//从通道中获取输出流对象

OutputStream os = sk.getOutputStream();

//给通道中写数据

os.write(“how are you”.getBytes());

//释放资源

sk.close();

}

}

package com.xayd_05;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class tcpServer {

public static void main(String[] args) throws Exception {

//创建TCP协议接收端Socket对象

ServerSocket ss = new ServerSocket(2222);

//监听客户端连接

Socket sk = ss.accept();

//从通道中读取来自客户端的数据

InputStream is = sk.getInputStream();

//获取输入流,并读取数据,显示在控制台

byte[] bys = new byte[1024] ;

int len = is.read(bys) ;

System.out.println(new String(bys,0,len));

//给客户端反馈

OutputStream os = sk.getOutputStream();

os.write(“fine,thinks”.getBytes());

//释放资源

sk.close();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值