目录
- 一、单次数据交互
- 1.客户端+服务器端(字节流版)
- 2.客户端+服务器端(字节流+字节缓冲流版)
- 二、多次数据交互
- 三、多次+多线程数据交互
一、单次数据交互
1.客户端+服务器端(字节流版)
public class TCPClient {
public static void main(String[] args) {
TCPClient.clientStart();
}
private static void clientStart(){
Socket socket = null;
OutputStream os = null;
InputStream is = null;
try {
socket = new Socket("127.0.0.1",8888);
os = socket.getOutputStream();
os.write("服务器,你好!".getBytes());
os.flush();
is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
is.close();
os.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
public class TCPServer {
public static void main(String[] args){
TCPServer.serverStart();
}
private static void serverStart(){
Socket socket = null;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888);
socket = serverSocket.accept();
InputStream is = socket.getInputStream();
byte[] bytes = new byte[1024];
int len=is.read(bytes);
System.out.println(new String(bytes,0,len));
OutputStream os = socket.getOutputStream();
os.write("收到谢谢!".getBytes());
os.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
2.客户端+服务器端(字节流+字节缓冲流版)
public class TCPClient {
public static void main(String[] args) {
TCPClient.clientStart1();
}
private static void clientStart1() {
Socket socket = null;
try {
socket = new Socket("127.0.0.1",8888);
DataOutputStream pos = new DataOutputStream(socket.getOutputStream());
pos.writeUTF("你好服务器");
pos.flush();
DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
System.out.println("服务器返回的信息===>" + dis.readUTF());
} catch (IOException e) {
e.printStackTrace();
}finally {
try{
socket.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}
public class TCPServer {
public static void main(String[] args){
TCPServer.serverStart1();
}
private static void serverStart1(){
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(8888);
socket = serverSocket.accept();
DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
System.out.println("客户端信息===>" + dis.readUTF());
DataOutputStream pos = new DataOutputStream(socket.getOutputStream());
pos.writeUTF("收到谢谢!!");
pos.flush();
}catch (IOException e){
e.printStackTrace();
}finally {
try {
socket.close();
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
二、多次数据交互
import java.io.*;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) {
uploadLocalFile();
}
private static void uploadLocalFile() {
File localFile = new File("E:\\test.txt");
if (!localFile.exists()) {
System.out.println("需要读取的文件不存在");
return;
}
Socket socket = null;
InputStream isFile = null;
OutputStream opsSocket = null;
InputStream isSocket = null;
try {
isFile = new FileInputStream(localFile);
socket = new Socket("127.0.0.1", 8888);
opsSocket = socket.getOutputStream();
int len;
byte[] bytes = new byte[1024];
while ((len = isFile.read(bytes)) != -1) {
opsSocket.write(bytes, 0, len);
}
opsSocket.flush();
socket.shutdownOutput();
isSocket = socket.getInputStream();
bytes = new byte[1024];
while ((len = isSocket.read(bytes)) != -1) {
System.out.println("===>>>服务器返回信息:" + new String(bytes, 0, len));
}
System.out.println("===>>>客户端结束");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
opsSocket.close();
isFile.close();
isSocket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TCPServer {
public static void main(String[] args){
saveFile(true);
}
private static void saveFile(boolean init){
String fileName;
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888);
} catch (IOException e) {
e.printStackTrace();
}
while (true){
if(init){
System.out.println("====>>>服务器启动");
init=false;
continue;
}
fileName = "testSave_"+System.currentTimeMillis()+new Random().nextInt(9999)+".txt";
File saveFile = new File("E:\\"+fileName);
Socket socket = null;
InputStream isSocket = null;
OutputStream osFile = null;
OutputStream osSocket = null;
try{
socket = serverSocket.accept();
isSocket = socket.getInputStream();
osFile = new FileOutputStream(saveFile);
int len;
byte[] bytes = new byte[1024];
while ((len=isSocket.read(bytes))!=-1){
osFile.write(bytes,0,len);
}
osFile.flush();
osSocket = socket.getOutputStream();
osSocket.write("上传文件成功".getBytes());
osSocket.flush();
System.out.println("===>>>保存客户端传送的文件 结束");
}catch (IOException e){
e.printStackTrace();
}finally {
try {
osSocket.close();
osFile.close();
isSocket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
三、多次+多线程数据交互
import java.io.*;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) {
uploadLocalFile();
}
private static void uploadLocalFile() {
File localFile = new File("E:\\test.txt");
if (!localFile.exists()) {
System.out.println("需要读取的文件不存在");
return;
}
Socket socket = null;
InputStream isFile = null;
OutputStream opsSocket = null;
InputStream isSocket = null;
try {
isFile = new FileInputStream(localFile);
socket = new Socket("127.0.0.1", 8888);
opsSocket = socket.getOutputStream();
int len;
byte[] bytes = new byte[1024];
while ((len = isFile.read(bytes)) != -1) {
opsSocket.write(bytes, 0, len);
}
opsSocket.flush();
socket.shutdownOutput();
isSocket = socket.getInputStream();
bytes = new byte[1024];
while ((len = isSocket.read(bytes)) != -1) {
System.out.println("===>>>服务器返回信息:" + new String(bytes, 0, len));
}
System.out.println("===>>>客户端结束");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
opsSocket.close();
isFile.close();
isSocket.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TCPServerMultiThread {
public static void main(String[] args){
saveFile(true);
}
private static void saveFile(boolean init){
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8888);
} catch (IOException e) {
e.printStackTrace();
}
while (true){
if(init){
System.out.println("====>>>服务器启动");
init=false;
continue;
}
try{
Socket socket = serverSocket.accept();
new Thread(new Runnable() {
@Override
public void run() {
String fileName = "testSave_"+System.currentTimeMillis()+new Random().nextInt(9999)+".txt";
File saveFile = new File("E:\\"+fileName);
InputStream isSocket = null;
OutputStream osFile = null;
OutputStream osSocket = null;
try{
isSocket = socket.getInputStream();
osFile = new FileOutputStream(saveFile);
int len;
byte[] bytes = new byte[1024];
while ((len=isSocket.read(bytes))!=-1){
osFile.write(bytes,0,len);
}
osFile.flush();
osSocket = socket.getOutputStream();
osSocket.write("上传文件成功".getBytes());
osSocket.flush();
System.out.println("===>>>保存客户端传送的文件 结束");
}catch (IOException e){
e.printStackTrace();
}finally {
try{
osSocket.close();
osFile.close();
isSocket.close();
socket.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
}).start();
}catch (IOException e){
e.printStackTrace();
}
}
}
}