01网络变成概述
网路编程三个基本要素
1.IP地址:定位网络某台计算机
2.端口号port:定位计算机某个进程
3.通信协议:通过IP地址和端口号定位,如何保增长数据可靠传输,这就需要依靠通信协议
网络编程基础类
InetAddress类
- InetAddress类:java.io.InetAddress getLocalHost() 得到本机的InetAddress对象 其中封装了IP地址和主机名 大多数网络类都要用到这个类,包括Socket ServerSocket URL DatagramSocket
- 常用静态方法
//获取本机的IP地址 和 主机名 的封装对象 :InetAddress
InetAddress localHost = InetAddress.getLocalHost();//获取本机的IP地址和主机名封装对象
//获取本机的IP地址
String hostAddress = localHost.getHostAddress();
System.out.println(hostAddress);
//获取本机的主机名
String hostName = localHost.getHostName();
System.out.println(hostName);
InetAddress byName = InetAddress.getByName("www.baidu.com");//通过域名获取InetAddress对象
System.out.println(byName.getHostAddress());//获取百度的IP地址
URL类
统一资源定位符
//创建URL对象
URL url = new URL("https://www.baidu.com/oa/index.html?name=zhangsan&password=123#tip");
//获取URL中的信息
String protocol = url.getProtocol();
System.out.println("通信协议:"+protocol);//通信协议:https
String path = url.getPath();
System.out.println(path);///oa/index.html
//获取URL中准备传输的数据
String query = url.getQuery();
System.out.println("需要提交的数据 "+query);//需要提交的数据 name=zhangsan&password=123
套接字
- 套接字是一种进程间的数据交换机制,利用套接字开发网络应用程序早已被广泛的采用,以至于成为事实上的标准。
- 在网络通信中,第一次主动发起通讯的程序称作客户端(client),而在第一次通讯中等待连接的程序被称作服务端,一旦通讯建立,则客户端和服务器端完全一样,没有本质区别
- 套接字与主机和端口号相连,主机地址就是客户端或服务器端所在的主机的IP地址,端口地址就是客户端或服务器程序使用的主机的通讯端口,在客户端和服务器中,分别创建独立的Socket,并通过Socket的属性,将两个Socket进行连接,这样客户端和服务器端通过套接字所建立的连接并使用IO进行通信。
//实现图片发送
package Socket_;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 接受客户端发送过来的图片 回复消息给客户端
*
*/
public class ToWayServer {
public static void main(String[] args) {
ServerSocket serverSocket = null;
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
serverSocket = new ServerSocket(8888);
System.out.println("服务器启动成功,正在接受客户端的请求:");
//开始接受客户端的请求
Socket clinetSocket = serverSocket.accept();
//读
bis = new BufferedInputStream(clinetSocket.getInputStream());
//开始读
byte[] bytes = new byte[1024];
int readCount = 0;
bos = new BufferedOutputStream(new FileOutputStream("./Middle/src/Socket_/serverSpace/dog.jpg"));
while((readCount = bis.read(bytes))!=-1){
//将客户端发送过来的图片写入到服务器指定区域
bos.write(bytes,0,readCount);
}
bos.flush();
//回话
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(clinetSocket.getOutputStream()));
bw.write("已收到");
bw.flush();
} catch (IOException e) {
throw new RuntimeException(e);
}finally {
try {
serverSocket.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
bis.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
try {
bos.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
}
package Socket_;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
/**
* 完成发送一个图片给服务器 接受服务器返回的消息
*
*/
public class TwoWayClient {
public static void main(String[] args) throws IOException {
//创建客户端套接字对象
Socket socketClient = new Socket(InetAddress.getLocalHost(),8888);
//发送一张图片给服务器
BufferedOutputStream bos = new BufferedOutputStream(socketClient.getOutputStream());
//开始写图片到服务器
//一边读 一边写()
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\崔芸山\\老杜javase\\Middle\\src\\Socket_\\dog.jpg"));
byte[] bytes = new byte[1024];
int readCount = 0;
while((readCount = bis.read(bytes))!=-1){
bos.write(bytes,0,readCount);
}
//刷新
bos.flush();
bos.close();
}
}
本文介绍了Java网络编程中的关键要素,如InetAddress用于获取本机IP和主机名,URL处理统一资源定位符,以及套接字(Socket)在客户端和服务端的通信实现。通过实例展示了如何创建ServerSocket和Socket进行图片发送和接收。
676

被折叠的 条评论
为什么被折叠?



