客戶端代碼:
package threadTest.socket;
import com.sun.corba.se.impl.orbutil.ObjectWriter;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
/**
* Created by Administrator on 2016/8/6.
* 客戶端類
*/
public class SocketClient {
public static void main(String[] args) {
Socket socket = null;
BufferedWriter bw = null;
boolean isCon = false;
Scanner input = new Scanner(System.in);
ObjectOutputStream oos = null;
ByteArrayOutputStream bos = null;
do{
try {
socket = new Socket("localhost", 5050); //連接服務器
System.out.println("請輸入信息");
String info = input.next();
bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bw.write(info); //發送信息
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
bw.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("是否繼續輸入信息(1,是;2,否):");
String flag = input.next();
if("1".equals(flag)){
isCon = true;
} else{
isCon = false;
}
} while(isCon);
}
}
服務器端代碼:
package threadTest.socket;
import com.sun.xml.internal.messaging.saaj.util.ByteInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by Administrator on 2016/8/6.
* 服務器端代碼
*/
public class SocketServer {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
try {
server = new ServerSocket(5050); //建立服務器
System.out.println("--服務器已啓動--");
while(true){ //保持監聽狀態
socket = server.accept(); //開啓監聽
Thread thread = new Thread(new ServerThread(socket)); //每一個客戶開啓一個新線程
thread.start(); //使線程處於可運行狀態
}
} catch (IOException e) {
e.printStackTrace();
} finally { //關閉流
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
服務器線程類:
package threadTest.socket;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* Created by Administrator on 2016/8/7.
* 線程
*/
public class ServerThread implements Runnable{
private Socket socket;
public ServerThread(Socket socket){
this.socket = socket;
}
@Override
public void run() {
BufferedReader br = null;
int count = 0;
try {
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String content = null;
while((content = br.readLine()) != null){
System.out.println("client info:" + content);
}
} catch (IOException e) {
e.printStackTrace();
} finally{
try {
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
這樣就能實現服務器多線程間通信