Java使用TCP套接字實(shí)現(xiàn)多人聊天功能詳解
本文實(shí)例講述了Java使用TCP套接字實(shí)現(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();
}
}
}
先運(yùn)行服務(wù)端哦,否則將會報(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緩存操作技巧匯總》
希望本文所述對大家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)簡單TCP聊天程序
- Java編程實(shí)現(xiàn)基于TCP協(xié)議的Socket聊天室示例
- java學(xué)習(xí)之利用TCP實(shí)現(xiàn)的簡單聊天示例代碼
- java實(shí)現(xiàn)一個簡單TCPSocket聊天室功能分享
- Java網(wǎng)絡(luò)編程TCP實(shí)現(xiàn)聊天功能
相關(guān)文章
用java將GBK工程轉(zhuǎn)為uft8的方法實(shí)例
本篇文章主要介紹了用java將GBK工程轉(zhuǎn)為uft8的方法實(shí)例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
Java關(guān)鍵字synchronized基本使用詳解
這篇文章主要給大家介紹了關(guān)于Java關(guān)鍵字synchronized基本使用的相關(guān)資料,synchronized可以用來同步靜態(tài)和非靜態(tài)方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-01-01
java String 轉(zhuǎn)成Double二維數(shù)組的方法
下面小編就為大家?guī)硪黄猨ava String 轉(zhuǎn)成Double二維數(shù)組的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10
Collection中的size()和isEmpty()區(qū)別說明
這篇文章主要介紹了Collection中的size()和isEmpty()區(qū)別說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02

