Java使用TCP套接字實(shí)現(xiàn)多人聊天功能詳解
本文實(shí)例講述了Java使用TCP套接字實(shí)現(xiàn)多人聊天功能。分享給大家供大家參考,具體如下:
廢話不多說(shuō),直接開搞:
先創(chuàng)建一個(gè)服務(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();
}
}
}
先運(yùn)行服務(wù)端哦,否則將會(huì)報(bào)空指針異常的。
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
- Java基于Tcp的基礎(chǔ)聊天功能實(shí)例
- Java使用TCP實(shí)現(xiàn)在線聊天的示例代碼
- java基于TCP協(xié)議實(shí)現(xiàn)聊天程序
- java實(shí)現(xiàn)基于Tcp的socket聊天程序
- Java基于Tcp/ip連接的多人交互聊天室
- java實(shí)現(xiàn)簡(jiǎn)單TCP聊天程序
- Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室示例
- java學(xué)習(xí)之利用TCP實(shí)現(xiàn)的簡(jiǎn)單聊天示例代碼
- java實(shí)現(xiàn)一個(gè)簡(jiǎn)單TCPSocket聊天室功能分享
- Java網(wǎng)絡(luò)編程TCP實(shí)現(xiàn)聊天功能
相關(guān)文章
win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效
這篇文章主要介紹了win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
Java 實(shí)戰(zhàn)項(xiàng)目錘煉之醫(yī)院門診收費(fèi)管理系統(tǒng)的實(shí)現(xiàn)流程
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+html+jdbc+mysql實(shí)現(xiàn)一個(gè)醫(yī)院門診收費(fèi)管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平2021-11-11
Spring Boot中Redis數(shù)據(jù)庫(kù)的使用實(shí)例
Spring Boot中除了對(duì)常用的關(guān)系型數(shù)據(jù)庫(kù)提供了優(yōu)秀的自動(dòng)化支持之外,對(duì)于很多NoSQL數(shù)據(jù)庫(kù)一樣提供了自動(dòng)化配置的支持。本篇文章主要介紹了Spring Boot中Redis的使用實(shí)例代碼,有興趣的開業(yè)了解一下。2017-04-04
java常用Lambda表達(dá)式使用場(chǎng)景源碼示例
這篇文章主要為大家介紹了java常用Lambda表達(dá)式使用場(chǎng)景源碼示例及應(yīng)用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2022-03-03
Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法
這篇文章主要介紹了Spring運(yùn)行時(shí)動(dòng)態(tài)注冊(cè)bean的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
Java Stream的基本概念以及創(chuàng)建方法
這篇文章主要介紹了Java Stream的基本概念以及創(chuàng)建方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下2020-08-08

