1 TCP程序
1)服务端:先启动
package com.lihaogn.inet;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 1 创建服务器 ServerSocker 对象
* 2 开启服务器,等待客户端连接
* 3 给客户端反馈信息
* 4 关闭资源
*
* @author Mac
*
*/
public class TCPServer {
public static void main(String[] args) throws IOException {
// 1 创建服务器 ServerSocker 对象
ServerSocket serverSocket=new ServerSocket(12345);
// 2 开启服务器,等待客户端连接
Socket socket=serverSocket.accept();
// 3 给客户端反馈信息
OutputStream outputStream=socket.getOutputStream();
outputStream.write("连接服务器成功!".getBytes());
// 4 关闭资源
outputStream.close();
socket.close();
// serverSocket.close(); // 服务器流通常是不关闭的
}
}
2)客户端:后启动
package com.lihaogn.inet;
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
/**
* 1 创建客户端对象 Socket
* 2 获取服务器端反馈的信息
* 3 关闭资源
*
* @author Mac
*
*/
public class TCPClient {
public static void main(String[] args) throws IOException {
// 1 创建客户端对象 Socket
Socket socket = new Socket(InetAddress.getLocalHost().getHostAddress(), 12345);
// 2 获取服务器端反馈的信息
InputStream inputStream = socket.getInputStream();
byte[] buffer = new byte[1024];
int length = inputStream.read(buffer);
System.out.println(new String(buffer, 0, length));
// 3 关闭资源
inputStream.close();
socket.close();
}
}
2 文件上传
1)服务器端
package com.lihaogn.inet;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 文件上传 服务器端
*/
public class FileServer {
public static void main(String[] args) throws IOException {
// 1 创建服务器,等待客户端连接
ServerSocket serverSocket = new ServerSocket(22222);
Socket clientSocket = serverSocket.accept();
// 2 获取连接客户端的IP地址对象
InetAddress ipAddress = clientSocket.getInetAddress();
String ipString = ipAddress.getHostAddress(); // 获取客户端的IP地址
System.out.println("发现一个客户端! " + ipString);
// 3 获取socket输入流,准备读取客户端数据
InputStream inputStream = clientSocket.getInputStream();
// 4 获取本地输出流,准备写入客户端传来的数据到本地
BufferedOutputStream fileOut = new BufferedOutputStream(new FileOutputStream("/Users/Mac/mydata/upload.png"));
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inputStream.read(buffer)) != -1) {
fileOut.write(buffer, 0, len);
}
// 5 发送反馈信息给客户端
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write("文件上传成功!".getBytes());
// 6 关闭资源
outputStream.close();
fileOut.close();
inputStream.close();
clientSocket.close();
}
}
2)客户端
package com.lihaogn.inet;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
/*
* 文件上传 客户端
*/
public class FileClient {
public static void main(String[] args) throws IOException{
// 1 创建客户端socket对象,连接服务器
Socket socket=new Socket(InetAddress.getLocalHost().getHostAddress(),22222);
// 2 获取socket输出流,准备将数据传输到服务器
OutputStream outputStream=socket.getOutputStream();
// 3 获取本地输入流,读取要传输的文件
BufferedInputStream fileIn=new BufferedInputStream(new FileInputStream("/Users/Mac/mydata/touxiang.png"));
// 4 传输数据
byte[] buffer=new byte[1024];
int len=-1;
while ((len=fileIn.read(buffer))!=-1) {
outputStream.write(buffer,0,len);
}
// 5 关闭socket输出流,告知服务器数据传输完毕
socket.shutdownOutput();
// 6 反馈信息
// 7 获取socket输入流
InputStream inputStream=socket.getInputStream();
// 8 读取数据
byte[] info=new byte[1024];
int length=inputStream.read(info);
System.out.println(new String(info, 0, length));
// 9 关闭资源
inputStream.close();
fileIn.close();
outputStream.close();
socket.close();
}
}
3 文件上传多线程版本
只需要更改服务器端:
package com.lihaogn.inet;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/*
* 文件上传 服务器端 多线程 接收多个客户端连接
*/
public class FileServer {
public static void main(String[] args) throws IOException {
// 1 创建服务器,等待客户端连接
ServerSocket serverSocket = new ServerSocket(22222);
while (true) {
final Socket clientSocket = serverSocket.accept();
new Thread() {
public void run() {
try {
// 2 获取连接客户端的IP地址对象
InetAddress ipAddress = clientSocket.getInetAddress();
String ipString = ipAddress.getHostAddress(); // 获取客户端的IP地址
System.out.println("发现一个客户端! " + ipString);
// 3 获取socket输入流,准备读取客户端数据
InputStream inputStream = clientSocket.getInputStream();
// 4 获取本地输出流,准备写入客户端传来的数据到本地
BufferedOutputStream fileOut = new BufferedOutputStream(
new FileOutputStream("/Users/Mac/mydata/upload.png"));
byte[] buffer = new byte[1024];
int len = -1;
while ((len = inputStream.read(buffer)) != -1) {
fileOut.write(buffer, 0, len);
}
// 5 发送反馈信息给客户端
OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write("文件上传成功!".getBytes());
// 6 关闭资源
outputStream.close();
fileOut.close();
inputStream.close();
clientSocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
};
}.start();
}
}
}