Socket
实现客户端向服务端发送数据或文件,服务端显示“我已经收到你的图片”,客户端显示图片已发送。
client
1. 创建Socket对象,构造方法中赋予ip地址与端口号。
2. 通过socket获取输出流,代表发送给服务端的数据流
3. 创建字节输入流存放发送的文件路径
4. 转化成二进制将其存放到字节数组中写出。
5. 关闭数据的输出,给服务器一个表示,才能让服务器终止读取数据,退出while循环
6. 客户端实现接受服务端的反馈,将数据打印到控制台。用socket接受服务端发送的数据流
7. 创建字节数组输出流,通过字节数组存放二进制文件将其写出。
server
1. 创建ServerSocket类,构造函数中指定其匹配的端口号
2. 调用accept()方法创建socket对象
3. 通过socket调用getInputStream()方法,代表客户端发给服务端的数据六
4 创建字节输出流对象,存放新文件的位置名称
5. 客户端向服务端发送反馈“我已经收到你的图片”,注意:这里必须再客户端调用shutdownOutput()方法,否则这里会一直读取客户端发来的数据不会退出whille循环
6. 服务端给客户端反馈,"iu图片已发送",是发送给客户端的数据。
具体代码如下:
@Test
public void client() throws IOException {
Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 7788);
OutputStream outputStream = socket.getOutputStream();
FileInputStream fileInputStream = new FileInputStream(new File("iu.jpg"));
byte[] buffer1 = new byte[1024];
int len1;
while (-1 != (len1 = fileInputStream.read(buffer1))) {
outputStream.write(buffer1,0,len1);
}
socket.shutdownOutput();
InputStream inputStream = socket.getInputStream();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buffer2 = new byte[1024];
int len2;
while (-1 != (len2 = inputStream.read(buffer2))) {
byteArrayOutputStream.write(buffer2,0,len2);
}
System.out.println(byteArrayOutputStream.toString());
socket.close();
outputStream.close();
fileInputStream.close();
byteArrayOutputStream.close();
}
@Test
public void server() throws IOException {
ServerSocket serverSocket = new ServerSocket(7788);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
FileOutputStream fileOutputStream = new FileOutputStream("iloveiu.jpg");
byte[] buffer = new byte[1024];
int len;
while (-1 != (len = inputStream.read(buffer))) {
fileOutputStream.write(buffer,0,len);
}
System.out.println("我已经收到你的图片");
OutputStream outputStream = socket.getOutputStream();
outputStream.write("Iu图片已发送".getBytes());
serverSocket.close();
socket.close();
inputStream.close();
fileOutputStream.close();
outputStream.close();
}