Java使用TCP套接字實現(xiàn)多人聊天功能詳解
本文實例講述了Java使用TCP套接字實現(xiàn)多人聊天功能。分享給大家供大家參考,具體如下:
廢話不多說,直接開搞:
先創(chuàng)建一個服務(wù)端:
package interWebWriterEven2;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
/**
* 服務(wù)端
* @author
*
*/
public class ServiceT {
static ArrayList<Socket> list = new ArrayList<Socket>();
public static void main(String[] args) {
ServerSocket server;
try {
server = new ServerSocket(9999);
while(true){
Socket socket = server.accept();
System.out.println(socket.getInetAddress().getHostName()+"連接成功。IP:"+socket.getInetAddress().getHostAddress());
list.add(socket);
ServiceThreadT t =new ServiceThreadT(socket);
t.start();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
接著是服務(wù)端的線程:
package interWebWriterEven2;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
/**
* 服務(wù)端線程
* @author
*
*/
public class ServiceThreadT extends Thread{
private Socket socket;
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
public ServiceThreadT(Socket socket) {
super();
this.socket = socket;
}
@Override
public void run() {
try {
@SuppressWarnings("resource")
BufferedWriter wFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D://messagesT.txt",true)));
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String strOut = "";
String strIn = "";
while(true){
strIn = socket.getInetAddress().getHostName()+":"+br.readLine();
strOut = strIn;
wFile.write(strIn);
wFile.newLine();
wFile.flush();
for (Socket soc : ServiceT.list) {
if(soc != socket){
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(soc.getOutputStream()));
bw.write(strOut);
System.out.println(strOut);
bw.newLine();
bw.flush();
}
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
然后是客戶端(應(yīng)用端):
package interWebWriterEven2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.Socket;
/**
* 客戶端
* @author
*
*/
public class ClientT {
public static void main(String[] args) {
try {
Socket socket = new Socket("127.0.0.1",9999);
ClientThreadT t = new ClientThreadT(socket);
t.start();
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String strIn = "";
while(true){
strIn = br.readLine();
System.out.println(strIn);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最后是客戶端的線程:
package interWebWriterEven2;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Scanner;
/**
* 客戶端的線程
* @author
*
*/
public class ClientThreadT extends Thread{
private Socket socket;
public Socket getSocket() {
return socket;
}
public void setSocket(Socket socket) {
this.socket = socket;
}
public ClientThreadT(Socket socket) {
super();
this.socket = socket;
}
@Override
public void run() {
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
try {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
while(true){
System.out.println();
bw.write(sc.nextLine().trim());
bw.newLine();
bw.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
先運行服務(wù)端哦,否則將會報空指針異常的。
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效
這篇文章主要介紹了win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java 實戰(zhàn)項目錘煉之醫(yī)院門診收費管理系統(tǒng)的實現(xiàn)流程
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+html+jdbc+mysql實現(xiàn)一個醫(yī)院門診收費管理系統(tǒng),大家可以在過程中查缺補漏,提升水平2021-11-11
Spring Boot中Redis數(shù)據(jù)庫的使用實例
Spring Boot中除了對常用的關(guān)系型數(shù)據(jù)庫提供了優(yōu)秀的自動化支持之外,對于很多NoSQL數(shù)據(jù)庫一樣提供了自動化配置的支持。本篇文章主要介紹了Spring Boot中Redis的使用實例代碼,有興趣的開業(yè)了解一下。2017-04-04
Java Stream的基本概念以及創(chuàng)建方法
這篇文章主要介紹了Java Stream的基本概念以及創(chuàng)建方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-08-08

