基于UDP用JAVA实现客户端和服务端通信
2021-04-26 07:27
标签:bsp 上传图片 pre tput str 字节 反馈 config 目的 案例模型分析: 基于TCP实现,一个Clinet(发送端)向,一个Server(接收端)上传图片文件的功能。要求,客户端上上传的图片路径,需要从配置文件.properties文件中读取 为了简化并可视结果:客户端和服务端,用本机ip上两个端口模拟即可; 定义Socket的时候,本机端口是OS随机分配的; 发送的文件类型是图片,用字节流(图片可能很大,这里用缓冲流包装) 由于服务器端套接字输入流是一个阻塞方法,客户端发送完数据后,需要用shutdown方法关闭客户端套接字输出流,这样服务端就不会一直阻塞等待新的输入; 客户端: 服务端: 可以看到运行完,图片被上传到默认路径 基于UDP用JAVA实现客户端和服务端通信 标签:bsp 上传图片 pre tput str 字节 反馈 config 目的 原文地址:https://www.cnblogs.com/debug-the-heart/p/13253886.htmlpackage netTCP;
import java.io.*;
import java.net.Socket;
public class Clinet {
public static void main(String args[]) throws IOException {
//获取文本内容,得到目标文件的路径
String filepathtoUpload = getPath();
System.out.println("获得要上传的文件所在路径是: "+filepathtoUpload);
//定义客户端端口(目的ip,目的端口)
Socket socket = new Socket("127.0.0.1",9991);
//定义缓冲输入流,准备读入图片的字节缓冲数组
BufferedInputStream bi = new BufferedInputStream(new FileInputStream(filepathtoUpload));
byte[] buffpic= new byte[1024];
int len;
//获取客户端发送流,做包装;一边读图片字节数据,一边发送
OutputStream out = socket.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(out);
while((len = bi.read(buffpic))!=-1){
bos.write(buffpic,0,len);
}
bos.flush();//刷新缓存
socket.shutdownOutput();//禁用此套接字的输出流,可以使服务器端的InputStream不在阻塞
//获取客户端输入流,接受文件上传后反馈信息
InputStream in = socket.getInputStream();
byte [] feedBack = new byte[1024];
int lenfeedBack = in.read(feedBack);
System.out.println(new String(feedBack,0,lenfeedBack));
//收到反馈信息后,关闭套接字socket
socket.close();
bi.close();
}
public static String getPath() throws IOException {
FileInputStream fileInputStream = new FileInputStream("G:\\JavaTestDir\\路径有中文\\config.properties");
byte[] buffer = new byte[1024];
int len = fileInputStream.read(buffer);
String s = new String(buffer,0,len);
return s;
}
}
package netTCP;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String args[]) throws IOException {
//定义服务端SeverSocker,并获取服务端连接的socket
ServerSocket serverSocket = new ServerSocket(9991);
Socket socket = serverSocket.accept();
//获取socket输入流,并用缓存字节流包装;
InputStream in = socket.getInputStream();
BufferedInputStream bis = new BufferedInputStream(in);
//指定一个路径(这里用默认路径),定义缓冲输出流,用于将图片保存到默认路径
FileOutputStream fo = new FileOutputStream("copy.jpg");
BufferedOutputStream bos = new BufferedOutputStream(fo);
//接收客户端的数据,并写到指定位置
byte[] buff = new byte[1024];
int len = 0;
while((len = bis.read(buff))!=-1){
bos.write(buff,0,len);
}
bos.flush();
//获取socket输出流
OutputStream out = socket.getOutputStream();
//返回文件上传结束信息给客户端(中文)
String feedbackMessage ="文件上传结束";
out.write(feedbackMessage.getBytes());
//out.close();//可不用,由客户端关闭socket即可
fo.close();
// in.close();//可不用,有客户端关闭socket即可
socket.close();
serverSocket.close();;
}
}
文章标题:基于UDP用JAVA实现客户端和服务端通信
文章链接:http://soscw.com/index.php/essay/79711.html