Soket客户端
package cocketdemo1;
import java.io.*;
import java.net.Socket;
public class ClientDemo {
//客户端 将本地文件上传到服务器,接受服务器的反馈
public static void main(String[] args) throws IOException {
Socket socket = new Socket("192.168.1.104",10000);
//是本地的流用来读取本地文件
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\\MyTCP\\pictore\\one.jpg"));
//写到服务器的流-----网络中的流必须get流
OutputStream socketOutputStream = socket.getOutputStream();//输出流
BufferedOutputStream bos = new BufferedOutputStream(socketOutputStream);//字节缓冲流包装一下提高效率
int b;
while ((b= bis.read())!=-1){
bos.write(b);//通过网络写入到服务器中
}
//给服务器一个结束标记,告诉服务器文件已经传输完毕
socket.shutdownOutput();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line;
while ((line = br.readLine())!=null){
System.out.println(line);
}
bis.close();
socket.close();
}
}
SeverSocket服务器端
package cocketdemo1;
import com.sun.source.tree.Scope;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class ServerDemo {
//服务器:接受客户端上传的文件,上传完毕之后给出反馈
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(10000);
ThreadPoolExecutor pool = new ThreadPoolExecutor(
3,//核心线程数量
10,//线程池的总数量
60,//临时线程空闲时间
TimeUnit.SECONDS, //临时线程空闲时间的单位
new ArrayBlockingQueue<>(5),//阻塞队列
Executors.defaultThreadFactory(),//创建线程的方式
new ThreadPoolExecutor.AbortPolicy()//任务拒绝策略
);
while (true) {
Socket accept = serverSocket.accept();
ThreadSocket ts = new ThreadSocket(accept);
// new Thread(ts).start();
pool.submit(ts);
}
// serverSocket.close();
}
}
线程池:
package cocketdemo1;
import java.io.*;
import java.net.Socket;
import java.util.UUID;
public class ThreadSocket implements Runnable{
private Socket acceptSocket;
public ThreadSocket(Socket accept) {
this.acceptSocket = accept;
}
@Override
public void run() {
BufferedOutputStream bufferedOutputStream = null;
try {
//网络中的流 ,从客户端读取数据的
BufferedInputStream bufferedInputStream = new BufferedInputStream(acceptSocket.getInputStream());
//本地的IO流,把数据写道本地中,实现永久化存储
bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(
"D:\\MyTCP\\pictore" + UUID.randomUUID().toString() + "jpg"));
int b;
while ((b = bufferedInputStream.read()) != -1) {
bufferedOutputStream.write(b);
}
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(acceptSocket.getOutputStream()));
bw.write("上传成功!");
bw.newLine();//回车换行
bw.flush();//刷新流
} catch (IOException e) {
e.printStackTrace();
} finally {
if (bufferedOutputStream !=null){
try {
bufferedOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (acceptSocket !=null){
try {
acceptSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
要先运行服务器端,再运行客户端。
版权声明:本文为weixin_51014035原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。