不用多线程
package com.ego.com.ego.socket;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
Scanner scanner = new Scanner(System.in);
String str;
str = scanner.nextLine();
writer.write(str);
writer.newLine();
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
String msg = reader.readLine();
System.out.println(msg);
writer.close();
reader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.ego.com.ego.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
while(true){
Socket socket = serverSocket.accept();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
String msg = reader.readLine();
System.out.println(msg);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
writer.write("hello~");
writer.close();
reader.close();
socket.close();
if("exit".equalsIgnoreCase(msg)){
break;
}
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用多线程
package com.ego.com.ego.socket;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
Scanner scanner = new Scanner(System.in);
String str;
str = scanner.nextLine();
writer.write(str);
writer.newLine();
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
String msg = reader.readLine();
System.out.println(msg);
writer.close();
reader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.ego.com.ego.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
List<Object> list = new ArrayList<>();
while(true){
Socket socket = serverSocket.accept();
Thread thread = new Thread(new MyRunnable(socket));
list.add(thread);
thread.start();
System.out.println(list.size());
if(list.size() == 0){
break;
}
}
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.ego.com.ego.socket;
import java.io.*;
import java.net.Socket;
public class MyRunnable implements Runnable{
private Socket socket;
@Override
public void run() {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
String msg = reader.readLine();
System.out.println(msg);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
writer.write("hello~");
writer.close();
reader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public MyRunnable(Socket socket) {
this.socket = socket;
}
}
使用Callabe代替Runnable
package com.ego.com.ego.socket;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 8888);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
Scanner scanner = new Scanner(System.in);
String str;
str = scanner.nextLine();
writer.write(str);
writer.newLine();
writer.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
String msg = reader.readLine();
System.out.println(msg);
writer.close();
reader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.ego.com.ego.socket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(8888);
while(true){
Socket socket = serverSocket.accept();
FutureTask<String> futureTask = new FutureTask<>(new MyCallable(socket));
new Thread(futureTask).start();
String msg = futureTask.get();
if("exit".equalsIgnoreCase(msg)){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
package com.ego.com.ego.socket;
import java.io.*;
import java.net.Socket;
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String> {
private Socket socket;
@Override
public String call() throws Exception {
String msg = null;
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
msg = reader.readLine();
System.out.println(msg);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
writer.write("hello~");
writer.close();
reader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
return msg;
}
public MyCallable(Socket socket) {
this.socket = socket;
}
}