TCP协议 传图片

服务器端程序

package receive;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Receive {
   public static void main(String args[])throws Exception{
	   //监听1050端口,将对象绑定到该端口上
	   ServerSocket serverSocket=new ServerSocket(1050);
	   while(true){
		   //获得与客户端对应的Socket对象
		   Socket s=serverSocket.accept();
		   new Thread(new ServerThread(s)).start();
		   serverSocket.close();
	   }
	    
   }
}
/*1.大体的流程通过套接字接收数据,存入缓冲区
 *2.创建一个文件准备存储数据
 *3.执行从缓冲区写入文件的操作
 *PS:数据流与非自身进行数据的写入与读出,InputStream就是从另一目标读入
 *OutputStream就是写出到另一目标
 */
class ServerThread implements Runnable{
	private Socket socket;
	//构造方法,没有返回值的都是构造方法,创建新类时用于初始化
	public ServerThread(Socket socket){
		this.socket=socket;
		
	}
	//
	
	public void run(){
		//返回客户端的IP地址,getInetAddress()获得远程IP地址,getHostAddress()后面那个转换成字符串的格式
		//String ip=socket.getInetAddress().getHostAddress();
		int count=1;
		try{
			//用于读取客户端的发送数据
			InputStream in=socket.getInputStream();
			//创建存储文件的空间
			File parentFile=new File("F:\\eclipse-jee-mars-1-win32-x86_64\\workspace\\receive");
			if(!parentFile.exists()){
				parentFile.mkdir();
			}
			//把客户端的IP地址作为上传文件的文件名
			File file=new File(parentFile,"My"+count+".jpg");
			//如果文件已存在,避免原文件被覆盖,新建一个不重名的文件
			while(file.exists()){
				file=new File(parentFile,"My"+count+++".jpg");
			}
			//准备将缓冲区中的数据写入文件
			FileOutputStream fos=new FileOutputStream(file);
			byte []buf=new byte[1024];
			int len=0;
			//向文件中写内容
			while((len=in.read(buf))!=-1){
				fos.write(buf,0,len);
			}
			//向客户端端发送的数据
			OutputStream out=socket.getOutputStream();
			out.write("上传成功".getBytes());
			
			fos.close();
			socket.close();
		}catch(Exception e){
			throw new RuntimeException(e);
			
		}
	}
}

服务器端程序

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*
 * 1.确定发送的目的地址,
 * 2.定义向客户端发送数据的数据流,定义即将发送数据的存储位置
 * 3.将即将发送的数据写入缓冲区,然后写到输出流
 * 
 */
public class Upload {
   public static void main(String args[])throws Exception{
	   //准备发送的目的地址
	   Socket socket =new Socket("127.0.0.1",1050);
	   //用于向服务器发送数据的输出流
	   OutputStream out=socket.getOutputStream();
	   //向缓冲区里面写数据,将数据写到输出流
	   FileInputStream fis=new FileInputStream("D:\\微信图片_20180814120031.jpg");
	   byte[]buf=new byte[2048];
	   int len;
	   while((len=fis.read(buf))!=-1){
		   out.write(buf,0,len);
		   
	   }
	   
	   socket.shutdownOutput();
	   //读取服务器端发送的数据
	   InputStream in=socket.getInputStream();
	   byte[] bufMsg =new byte[2048];
	   //并写到缓冲区然后输出到控制台
	   int num=in.read(bufMsg);
	   String Msg=new String(bufMsg,0,num);
	   System.out.println(Msg);
	   in.close();
	   fis.close();
	   socket.close();
   }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值