黑马程序员技术交流社区
标题:
求解答
[打印本页]
作者:
longyun
时间:
2016-6-3 22:30
标题:
求解答
使用socket编写一个Java程序,要求:客户端上传图片到服务端,服务端接收完毕后存放到本地,并发送“接收完毕”的信息到客户端,客户端在控制台显示接收的情况?
作者:
18611643318
时间:
2016-6-3 22:58
package com.itheima;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 8、使用TCP协议写一个可以上传文件的服务器和客户端。
* @author Venus
*
*/
public class Test8 {
public static void main(String[] args) {
//启动一个新的线程,调用服务器的服务
new Thread() {
public void run() {
try {
Server.server();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
//当前线程,调用客户端的上传方法
try {
new Client().upload();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//客户端
class Client {
public static void upload() throws Exception {
//建立Socket服务 ,传入参数服务器的ip和端口号
Socket Socket = new Socket("127.0.0.1", 9527);
//从客户端本地读取文件,并写入socket的输出流中
OutputStream out = Socket.getOutputStream();
//实例化对象fileReader
InputStream fileRead = new FileInputStream("D:\\1.txt");
//建立数组
byte[] buf = new byte[1024];
int len = 0;
//判断是否读到文件末尾
while((len=fileRead.read(buf)) != -1)
{
out.write(buf, 0, len);
}
//断开socket
Socket.shutdownOutput();
//获取从服务端反馈的信息
BufferedReader in = new BufferedReader(new InputStreamReader(Socket.getInputStream()));
String serverBack = in.readLine();
System.out.println(serverBack);
//资源关闭
Socket.close();
fileRead.close();
}
}
//服务端
class Server {
public static void server() throws Exception {
//建立服务端Socket
ServerSocket ss = new ServerSocket(9527);
//接收客户端Socket
Socket fileLoaderSocket = ss.accept();
//打印连接信息
String ip = fileLoaderSocket.getInetAddress().getHostAddress();
System.out.println(ip + "...conncected");
//接收文件,并保存
InputStream in = fileLoaderSocket.getInputStream();
//实例化对象fileSave
OutputStream fileSave = new FileOutputStream("D:\\2.txt");
//建立数组buf
byte[] buf = new byte[1024];
int len = 0;
//判断是否读到文件末尾
while((len=in.read(buf)) != -1)
{
fileSave.write(buf, 0, len);
//刷新
fileSave.flush();
}
//返回文件复制情况信息
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fileLoaderSocket.getOutputStream()));
out.write("文件上传成功");
//刷新
out.flush();
//资源关闭
ss.close();
fileLoaderSocket.close();
fileSave.close();
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2