{网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
2017-05-04 12:11
1016 查看
要求:
说明:这里我们只要建立一个服务端就可以了,然后让多台电脑使用客户端给这个服务端发送文件。
特别注意:服务端和客户端端口号的对接,以及正确的IP地址
代码:
客户端:
服务器端:
这里可以不使用多线程:
但使用单线程有一个弊端:服务器每次只能在接收完其中一个客户端发过来的文件后,才能接收下一个客户端发送来的文件。即如果服务器在接收文件,那么客户端必须等服务器接收完毕后,才能发送过去。
因此,这里要使用多线程。
实现多个客户端发送文件给一个服务器端 提示:多个人创建客户端发送文件,服务端循环接收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 java.net.Socket; import java.net.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 block e.printStackTrace(); } catch< 1029c /span> (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(os!=null){ try { os.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(fis!=null){ try { fis.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
服务器端:
这里可以不使用多线程:
但使用单线程有一个弊端:服务器每次只能在接收完其中一个客户端发过来的文件后,才能接收下一个客户端发送来的文件。即如果服务器在接收文件,那么客户端必须等服务器接收完毕后,才能发送过去。
因此,这里要使用多线程。
package com.qf.demo3; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.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 block e.printStackTrace(); } } } class MyThread extends Thread{ Socket socket ; public MyThread(Socket socket) { this.socket = socket; } @Override public 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 block e.printStackTrace(); }finally{ if(fos!=null){ try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(is!=null){ try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(socket!=null){ try { socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }
相关文章推荐
- {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习
- 网络编程应用:基于TCP协议【实现文件上传】--练习
- 网络编程应用:基于UDP协议【实现文件下载】--练习
- 网络编程应用:基于TCP协议【实现对象传输】--练习
- 网络编程应用:基于TCP协议【实现一个聊天程序】
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- socket网络编程实现文件从服务器端到客户端的传输
- java网络编程实现客户端连接服务器端,并发送消息例子(1)。(阻塞式的方法)
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 【TCP协议练习】服务端利用多线程TCP同时接受多个客户端发送文件
- 网络编程应用:基于UDP协议【实现聊天程序】--练习
- 网络编程与多线程的应用--基于socket udp编写一个简单聊天程序
- lesson 11:使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出。
- 通过网络编程、文件IO、多线程,实现客户端和服务端对话。
- 使用TCP协议编写一个网络程序,设置服务器端的监听端口是8002,当与客户端建立连接后,服务器端向客户端发送数据“Hello, world”,客户端收到数据后打印输出
- 自己学习android网络应用部分,练习的一个多线程的服务器和客户端
- Android网络编程之一个Android下菜单系统模块的实现(开桌功能))(Android客户端+服务器端Servlet+Mysql)
- JAVA Socket应用学习——基于TCP协议实现的网络通信
- 基于Nginx实现一个自己的HTTP模块--发送磁盘中的文件