1、TCP客户端,用于调用图片进行上传服务器
package cn.bruce.TCPupload;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/*实现TCP客户端,连接到服务器,实现图片上传
* 1、Socket套接字连接服务器
* 2、通过Socket获取字节输出流,写图片
* 3、使用自己的流对象,读取图片fileinputstream
* 4、使用字节数组进行缓冲,使用输出流,将图片输出到服务器
* 5、通过Socket套接字获取字节输入流,打印服务器传回的上传成功、
* 6、关闭资源
*/
public class TCPCLIENT {
public static void main(String[] args) throws IOException, IOException {
// 创建socket,连接服务器
Socket s = new Socket("127.0.0.1", 8888);
// 通过客户端的套接字对象Socket方法,获取字节输出流,将数据写向服务器
OutputStream out = s.getOutputStream();
// 读取图片
FileInputStream fis = new FileInputStream("D:\\r.jpg");
// 服务服务器发回的数据
InputStream in = s.getInputStream();
int len = 0;
byte[] data = new byte[1024];
while ((len = fis.read(data)) != -1)
{
out.write(data, 0, len);
}
s.shutdownOutput();//给服务器写终止序列(很重要!)
System.out.println(new String(data, 0, in.read(data)));
s.close();
fis.close();
}
}
2、TCPsevers服务器端 用于接收客户端传来的数据(实际是接收客户端套接字对象)
package cn.bruce.TCPupload;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPSEVERS {
public static void main(String[] args) throws IOException {
// 创建服务器对象
ServerSocket ss = new ServerSocket(8888);
while (true)
{
// 调用accept()方法,获取客户端套接字对象
Socket s = ss.accept();
//获取到一个客户端,必须开启新线程
new Thread(new Threadrun(s)).start();
}
}
}
3、线程代码实现 传入socket对象 对进行收到的数据进行接收处理
package cn.bruce.TCPupload;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Random;
import java.util.Scanner;
public class Threadrun implements Runnable {
private Socket s;
public Threadrun(Socket socket)
{
s = socket;
}
@Override
public void run() {
try
{
// 通过套接字对象,socket获取字节
InputStream in = s.getInputStream();
// 服务器向客户端回数据,字节输出流,通过客户端套接字对象获取字节输出流
OutputStream out = s.getOutputStream();
byte[] data = new byte[1024];
File file = new File("D:\\test");
if (!file.exists())
{
file.mkdirs();
}
//命名规则
String s1 = System.currentTimeMillis() + new Random().nextInt(999)+".jpg";
// 创建字节输出流,将图片写到文件夹里
FileOutputStream fos = new FileOutputStream(file + "\\" + s1);
int len = 0;
if ((len = in.read(data)) != -1)
{
fos.write(data, 0, len);
}
s.getOutputStream().write("上传成功!".getBytes());//给客户端反馈信息
fos.close();
s.close();
} catch (Exception e)
{
e.printStackTrace();
}
}
}