生活随笔
收集整理的這篇文章主要介紹了
【Java线程】多线程实现简单的一对一聊天
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
實現原理:
1、主方法:在主方法中構建一個輸入流接收鍵盤的輸入,根據接收到的輸入信息判定角色是服務器端還是客戶端;然后構建相應的socket,開啟線程;
2、線程-堅守鍵盤陣地:接收鍵盤的輸入,將從鍵盤輸入的信息寫入到網絡中去;
3、線程-堅守網絡陣地:從網絡中讀入信息,并將其打印到控制臺;
代碼示例:
GoodTcp.java:
package com.lmb;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public
class GoodTcp {public static void main(String[] args)
throws Exception {System.out.println(
"請輸入IP和端口號,或直接輸入端口號:");System.out.println(
"例如:192.168.0.2,8888或者8888");String[] ss=
new BufferedReader(
new InputStreamReader(System.in)).readLine().split(
",");Socket skt=
null;
if (ss.length==
1) {skt=
new ServerSocket(Integer.parseInt(ss[
0])).accept();}
else {skt=
new Socket(ss[
0],Integer.parseInt(ss[
1]));}
new KeyTcp(skt).start();
new NetTcp(skt).start();}
}
/*** 堅守鍵盤陣地,功能:接受鍵盤的輸入,將從鍵盤寫入的信息輸出到網絡中去*/
class KeyTcp extends Thread{private Socket skt;public KeyTcp(Socket skt) {
this.skt=skt;}public void run() {
try {BufferedReader br=
new BufferedReader(
new InputStreamReader(System.in));PrintWriter pw=
new PrintWriter(skt.getOutputStream());
for (;;) {String s=br.readLine();
if (s==
null)
break;pw.println(s);pw.flush();}}
catch (Exception e) {e.printStackTrace();}}
}
/*** 堅守網絡陣地,功能:從網絡中讀入信息,并將其打印到控制臺*/
class NetTcp extends Thread{private Socket skt;public NetTcp(Socket skt) {
this.skt=skt;}public void run() {
try {BufferedReader br=
new BufferedReader(
new InputStreamReader(skt.getInputStream()));
for (;;) {System.out.println(br.readLine());}}
catch (Exception e) {System.out.println(
"對方下線或者掉線……");}}
}
運行結果:
總結
以上是生活随笔為你收集整理的【Java线程】多线程实现简单的一对一聊天的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。