多線程通信(服務(wù)端):
package cn.socket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerDemo {
/**
* @author SE-Mr.Wang
* @Date:2018-04-20
*/
public static void main(String[] args) {
try {
//創(chuàng)建服務(wù)端套接字對象
ServerSocket ss = new ServerSocket(8888);
//調(diào)用accept方法
Socket s = ss.accept();
//打開輸入流
InputStream is = s.getInputStream();
//封裝輸入流
DataInputStream dis = new DataInputStream(is);
//創(chuàng)建輸入流線程
new MyServerReader(dis).start();
/**
* @info 若實現(xiàn)Runnable接口則
* Thread t = new Thread(new MyServerReader(dis));
* t.start();
*/
//打開輸出流
OutputStream os = s.getOutputStream();
//封裝輸出流
DataOutputStream dos = new DataOutputStream(os);
//創(chuàng)建輸出流線程
new MyServerWriter(dos).start();
/**
* @info 若實現(xiàn)Runnable接口則
* Thread t2 = Thread(new MyServerWriter(dos));
* t2.start();
*/
} catch (IOException e) {
e.printStackTrace();
}
}
//輸入流線程內(nèi)部靜態(tài)類
static class MyServerReader extends Thread{
private DataInputStream dis;
public MyServerReader(DataInputStream dis){
this.dis = dis;
}
public void run(){
String info = "";
while(true){
try {
info = dis.readUTF();
if(!info.equals("")){
System.out.println("客戶端發(fā)來消息:"+info);
}
if(info.equals("結(jié)束")){
System.out.println("客戶端結(jié)束聊天菌瘪,本次聊天進(jìn)程結(jié)束H⑺!1獭!");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//輸出流線程內(nèi)部靜態(tài)類
static class MyServerWriter extends Thread{
private DataOutputStream dos;
public MyServerWriter(DataOutputStream dos){
this.dos = dos;
}
public void run(){
String info = "";
//讀取鍵盤輸入流
InputStreamReader isr = new InputStreamReader(System.in);
//封裝鍵盤輸入流
BufferedReader br = new BufferedReader(isr);
while(true){
try {
info = br.readLine();
if(!info.equals("")){
dos.writeUTF(info);
}
if(info.equals("結(jié)束")){
System.out.println("已方端結(jié)束聊天梅肤,本次聊天進(jìn)程結(jié)束<啤P裙狻枫弟!");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}? ? ?
多線程通信(客戶端):
package cn.socket;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientDemo {
/**
* @author SE-Mr.Wang
* @Date:2018-04-20
*/
public static void main(String[] args) {
//創(chuàng)建客戶端套接字對象
try {
Socket s = new Socket("localhost",8888);
//打開輸入流
InputStream is = s.getInputStream();
//封裝輸入流
DataInputStream dis = new DataInputStream(is);
//創(chuàng)建輸入流線程
new MyClientReader(dis).start();
/**
* @info 若實現(xiàn)Runnable接口則
* Thread t = new Thread(new MyClientReader(dis));
* t.start();
*/
//打開輸出流
OutputStream os = s.getOutputStream();
//封裝輸出流
DataOutputStream dos = new DataOutputStream(os);
//創(chuàng)建輸出流線程
new MyClientWriter(dos).start();
/**
* @info 若實現(xiàn)Runnable接口則
* Thread t2 = Thread(new MyClientWriter(dos));
* t2.start();
*/
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
//輸入流線程內(nèi)部靜態(tài)類
static class MyClientReader extends Thread{
private DataInputStream dis;
public MyClientReader(DataInputStream dis){
this.dis = dis;
}
public void run(){
String info = "";
while(true){
try {
info = dis.readUTF();
if(!info.equals("")){
System.out.println("服務(wù)端發(fā)來消息:"+info);
}
if(info.equals("結(jié)束")){
System.out.println("服務(wù)端結(jié)束聊天,本次聊天進(jìn)程結(jié)束G⑾佟=潘凇!");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
//輸出流線程內(nèi)部靜態(tài)類
static class MyClientWriter extends Thread{
private DataOutputStream dos;
public MyClientWriter(DataOutputStream dos){
this.dos = dos;
}
public void run(){
String info = "";
//打開鍵盤輸入流
InputStreamReader isr = new InputStreamReader(System.in);
//封裝鍵盤輸入流
BufferedReader br = new BufferedReader(isr);
while(true){
try {
info = br.readLine();
if(!info.equals("")){
dos.writeUTF(info);
}
if(info.equals("結(jié)束")){
System.out.println("已方端結(jié)束聊天蘸朋,本次聊天進(jìn)程結(jié)束:宋蕖!藕坯!");
System.exit(0);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}