主要是学到网络编程这一块儿,啥啥知识都应该差不多了,要是看不懂我写的,我不承认是我写的不好(狗头保命),祝大家元宵节快乐!(此祝福过期请忽略
一、补充知识
TCP和UDP的区别是必须区分服务端和客户端
Socket:插座
在网络编程中,叫套接字
,通俗理解就是插座和插销,连接用的。
服务端:ServerSocket类
//构造方法,创建绑定到特定端口的服务器套接字。
ServerSocket(int port)
//accept() 返回值类型Socket 侦听并接收套接字的连接。
//getInetAddress() 返回值类型InetAddress 返回此服务器套接字的本地地址
ServerSocket对象负责监听某个计算机的某个端口,使用accept方法来接收客户端的请求,在收到请求之前,发生阻塞
客户端:Socket类
//构造方法
Socket(String host,int port)//创建一个套接字连接指定主机上的指定端口
Socket(InetAddress address,int port)//创建一个套接字连接指定IP地址上的指定端口
返回值 | 方法名 | 描述 |
---|---|---|
int | getPort() | 返回此对象上进行连接的端口号 |
InetAddress | getLocalAddress() | 返回此对象上的IP地址(封装为InetAddress类 |
void | close() | 关闭连接,结束通信,结束前应该关闭此对象上的所有其他流 |
InputStream | getInputStream() | 返回输入流对象,用于读取此对象上的数据 |
OutputStream | getOutputStream() | 返回输出流对象,用于写入此对象上的数据 |
二、文件上传、文件下载 案例练习
说明:D盘代表服务器,E盘代表客户端。
D盘下Load.txt文件(内容:Load)表示要下载的文件
E盘下Up.txt文件(内容:Up)代表要上传的文件
理解了以后上传和下载其实没啥区别,这里实现文件上传,文件下载留作练习(稍后写在评论区
2.1 服务器端
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class PS {//TCP协议 服务器端
public static void main(String[] args) throws Exception{
//创建服务器端
ServerSocket serverSocket = new ServerSocket(666);
//接受数据
Socket accept = serverSocket.accept();
//创建输入流准备读取接到的数据
InputStream inputStream = accept.getInputStream();
//创建输出流,准备将数据写入服务器
FileOutputStream fileOutputStream = new FileOutputStream("D:\\copyUp.text");
//写入数据
byte[] bytes = new byte[1024];
int leng = 0;
while ( (leng = inputStream.read(bytes))!=-1){
fileOutputStream.write(bytes,0,leng);
}
//关闭流
inputStream.close();
fileOutputStream.close();
serverSocket.close();//服务器一般是不关的
}
}
2.2 客户端
import java.io.FileInputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class PC {
public static void main(String[] args) throws Exception{
//创建客户端套接字
Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 666);
//创建输入流准备读取本地文件
FileInputStream fileInputStream = new FileInputStream("E:\\Up.txt");
//创建socket对象的输出流准备进行上传
OutputStream outputStream = socket.getOutputStream();
//上传数据
byte[] bytes = new byte[1024];
int leng = 0;
while( (leng = fileInputStream.read(bytes))!=-1){
outputStream.write(bytes,0,leng);
}
//关流(后开的先关
outputStream.close();
fileInputStream.close();
socket.close();
}
}
啊?今天的是不是有点儿简单了(可以结合多线程实现客户端下载多个文件?,算了,反正放假
祝愿努力学习的每个人都能取得好的结果!