Java网络编程

本文深入解析Java网络编程中的TCP与UDP协议,包括数据传输、相关类库使用、实例代码演示,以及如何实现客户端和服务端的通信。重点介绍了InetAddress、InetSocketAddress、URL、DatagramSocket、DatagramPacket等核心类的应用,并通过具体实例展示了UDP和TCP的使用场景。

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



Java网络编程:
数据传输
协议:TCP和UDP协议
1 TCP:三次交握,面向连接,可靠传输
2 UDP:无连接,不可靠
传输:
先封装,再拆封
相关的类:
InetAddress InetSocketAddress
URL
TCP:ServerSocket Socket
UDP:DatagramSocket DatagramPacket




InetAddress 封装计算机的IP地址和DNS,没有端口
1 静态方法获取对象:
InetAddress.getLocalHost();
InetAddress.getByName(URL);
InetAddress.getByName(IP);
2 实例方法
getHostAddress() 返回IP地址
getHostName() 返回域名|本机为计算机名
InetSocketAddress 封装了计算机的IP和端口,用于socket通信
1 获取对象
InetSocketAddress(String hostName,int port)
InetSocketAddress(InetAddress address,int port)
2 实例方法
getAddress() 返回InetAddress对象
getPort() 返回端口
getHoistName() 返回域名




URL:
URI:统一资源定位符,用来唯一地标识一个资源
URL:统一资源定位器,它是一种具体的URI,统一资源定位符,由4部分组成:协议,主机,资源文件名,端口号
URL url=new URL("http://www.hello.com");
URL url=new URL(url,"world.txt");
实例方法:
getProtocol() getHost() getPort() getFile() getPath() getRef() openStream()






UDP
DatagramSocket DatagramPacket


客户端:
1 创建客户端 DatagramSocket 类
2 创建数据 字节数组
3 打包 DatagramPacket+服务器地址 端口
4 发送
5 释放资源


import java.io.IOException;
import java.net.*;


/**
 * Created by lenovo on 2016/1/23.
 */
public class UDPClient {
    public static void main(String[] args) throws SocketException,IOException{
        DatagramSocket client=new DatagramSocket(5000);
        String information="hello world";
        byte[] data=information.getBytes();
        DatagramPacket packet=new DatagramPacket(data, data.length, new InetSocketAddress("localhost",3000));
        client.send(packet);
        client.close();
    }
}




服务端:
1 创建服务端 DatagramSocket 类 端口
2 准备接受容器 字节数组 封装 DatagramPacket
3 包 接收数据
4 分析
5 释放资源


package TestInternet;


import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;


/**
 * Created by lenovo on 2016/1/23.
 */
public class UDPServer {
    public static void main(String[] args) throws SocketException,IOException{
        DatagramSocket server=new DatagramSocket(3000);
        byte[] container=new byte[1024];
        DatagramPacket packet=new DatagramPacket(container,container.length);
        server.receive(packet);
        byte[] content=packet.getData();
        String information=new String(content);
        System.out.println(information);
        server.close();
    }
}


TCP:面向连接,安全可靠,效率低
面向连接:请求,响应
Socket编程
服务器:ServerSocket
package TestInternet;


import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;


/**
 * Created by lenovo on 2016/1/23.
 */
public class TCPServer {
    public static void main(String[] args) throws IOException{
        ServerSocket server=new ServerSocket(3000);
        Socket socket=server.accept();
        System.out.println("hello");
        String info="welcome";
        BufferedWriter bufferedWriter=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bufferedWriter.write(info);
        bufferedWriter.newLine();
        bufferedWriter.flush();
        bufferedWriter.close();
    }
}


客户端:Socket
package TestInternet;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;


/**
 * Created by lenovo on 2016/1/23.
 */
public class TCPClient {
    public static void main(String[] args) throws IOException{
        Socket client=new Socket("localhost",3000);
        BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(client.getInputStream()));
        String info=null;
        while((info=bufferedReader.readLine())!=null){
            System.out.println(info);
        }
        bufferedReader.close();
    }

}


HTTP协议版本 状态代码 描述
HTTP /1.1 200 OK
HTTP 应答码也称为状态码,它反映了web服务器处理HTTP请求状态。HTTP应答码由三位数字构成,其中首位数字定义了应答码的类型
1XX:信息类,表示收到web浏览器请求,正在进一步处理中;
2XX:成功类,表示用户请求被正确接受,理解和处理
3XX:重定向类:表示请求没有成功,客户必须采取进一步动作
4XX:客户端错误,表示客户端提交的请求有错误
5XX:服务器错误,表示服务器不能完成对请求的处理
常见HTTP应答码:
200 OK
400 Bad Request
404 Not Found
405 Method Not Allowed


响应头:
一些重要的字段
Content-Length,Content-Type


响应正文:
服务器返回HTML页面,响应头与响应正文之间必须存在CRLF(\r\n)符号行,与响应头分开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值