失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习

{网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习

时间:2022-09-27 13:46:54

相关推荐

{网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习

要求:

实现多个客户端发送文件给一个服务器端提示:多个人创建客户端发送文件,服务端循环接收socket,从socket中获取文件

说明:这里我们只要建立一个服务端就可以了,然后让多台电脑使用客户端给这个服务端发送文件。

特别注意:服务端和客户端端口号的对接,以及正确的IP地址

代码:

客户端:

package Homework4;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import .Socket;import .UnknownHostException;public class Client {public static void main(String[] args) {System.out.println("客户端已启动");File file=new File("Example");file.mkdirs();File file2=new File("Example\\a.txt");Socket socket=null;InputStream is=null;OutputStream os=null;FileInputStream fis=null;try {socket=new Socket("10.16.152.24",7777);is=socket.getInputStream();fis=new FileInputStream(file2);os=socket.getOutputStream();byte[] bs=new byte[1024];int count=0;//发送文件while((count=fis.read(bs))!=-1){os.write(bs, 0, count);os.flush();}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if(is!=null){try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(os!=null){try {os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(fis!=null){try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(socket!=null){try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

服务器端:

这里可以不使用多线程:

但使用单线程有一个弊端:服务器每次只能在接收完其中一个客户端发过来的文件后,才能接收下一个客户端发送来的文件。即如果服务器在接收文件,那么客户端必须等服务器接收完毕后,才能发送过去。

因此,这里要使用多线程。

package com.qf.demo3;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import .ServerSocket;import .Socket;public class Server {public static void main(String[] args) {try {ServerSocket serverSocket = new ServerSocket(8888);while(true){Socket socket = serverSocket.accept();MyThread thread = new MyThread(socket);thread.start();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}class MyThread extends Thread{Socket socket ;public MyThread(Socket socket) {this.socket = socket;}@Overridepublic void run() {InputStream is = null;FileOutputStream fos = null;try {is = socket.getInputStream();byte[] bs = new byte[1024];int count = 0;long l = System.currentTimeMillis();fos = new FileOutputStream(new File(l+".txt"));while((count = is.read(bs))!=-1){fos.write(bs, 0, count);fos.flush();}System.out.println("接收文件完毕");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{if(fos!=null){try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(is!=null){try {is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(socket!=null){try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

如果觉得《{网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。