日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言tcp多线程聊天室,66 网络编程(五)——TCP多线程实现多人聊天室

發(fā)布時間:2024/3/24 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言tcp多线程聊天室,66 网络编程(五)——TCP多线程实现多人聊天室 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

思路

客戶端讀寫各一個類,可以使內(nèi)部類,實現(xiàn)Runnable。讀寫類都與服務(wù)器端建立連接,一個收,一個發(fā)。

客戶端實現(xiàn)接收和轉(zhuǎn)發(fā)。多線程實現(xiàn)每個客戶端的連接(使與各客戶端的連接獨立)。

服務(wù)器端中創(chuàng)建一個公共緩沖池,用于存放消息。通過服務(wù)器中的轉(zhuǎn)發(fā)方法轉(zhuǎn)發(fā)給個客戶端。

客戶端?代碼

package _20191218;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.Socket;

import java.net.UnknownHostException;

import java.util.Scanner;

/**

*多人聊天室,客戶端,實時發(fā)送接收數(shù)據(jù),要實現(xiàn)多線程

*/

public class TCPMultipleChatClient {

public static void main(String[] args) {

System.out.println("-------局域網(wǎng)聊天室-----------");

Scanner scan1 = new Scanner(System.in);

System.out.print("請輸入您的昵稱:");

String username = scan1.nextLine();

String address = "176.195.108.53";//服務(wù)器地址

int port = 6788;//服務(wù)器程序端口

Socket client = null;

try {

client = new Socket(address,port);

System.out.println("成功登入,可以開始聊天了!");

System.out.println("------------------------");

} catch (UnknownHostException e) {

System.err.println("服務(wù)器連接失敗");

} catch (IOException e) {

System.err.println("服務(wù)器連接失敗");

}

/**

* 啟動接收器與發(fā)送器

*/

new Thread(new Sender(client),username).start();

new Thread(new Receiver(client)).start();

}

}

//發(fā)送器:實現(xiàn)Runnable

class Sender implements Runnable{

private boolean flag = true;//服務(wù)器存活為 true

//輸出流

private DataOutputStream dos;

//構(gòu)造器:初始化

public Sender(Socket client) {

try {

dos = new DataOutputStream(client.getOutputStream());

} catch (IOException e) {

System.err.println("服務(wù)器未開啟,連接失敗");

}

}

public void sendMessage() {

Scanner scan = new Scanner(System.in);

String message = scan.nextLine();

try {

dos.writeUTF(Thread.currentThread().getName()+":"+message);

dos.flush();

} catch (IOException e) {

System.err.println("Sender:服務(wù)器關(guān)閉");

flag = false;

}

}

public void run() {

while(flag) {

sendMessage();

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

//接收器:實現(xiàn)Runnable

class Receiver implements Runnable{

private boolean flag = true;//服務(wù)器存活為 true

//輸入流

private DataInputStream dis;

public Receiver(Socket client) {

try {

dis = new DataInputStream(client.getInputStream());

} catch (IOException e) {

e.printStackTrace();

}

}

//讀取消息

public void readMessage() {

try {

System.out.println(dis.readUTF());

} catch (IOException e) {

System.err.println("Reciver:服務(wù)器關(guān)閉");

flag =false;

}

}

public void run() {

while(flag) {

readMessage();

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

//}

服務(wù)器端?代碼

package _20191218;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.Scanner;

/**

* 多人聊天室,服務(wù)端,實時轉(zhuǎn)發(fā)數(shù)據(jù)

*/

public class TCPMultipleChatServer {

public static void main(String[] args) {

System.out.println("服務(wù)端開啟");

//創(chuàng)建服務(wù)器端

ServerSocket server = null;

try {

server = new ServerSocket(6788);//服務(wù)器端口

} catch (IOException e) {

e.printStackTrace();

}

//容器

Container container = new Container();

//循環(huán)監(jiān)聽

while(true) {

//阻塞監(jiān)聽連接請求

try {

Socket client = server.accept();

System.out.println("一位用戶成功連接");

container.doCount();

//開啟接收器

new Thread(new Receiver(client,container)).start();

//開啟轉(zhuǎn)發(fā)器

new Thread(new Transmit(client,container)).start();

} catch (IOException e) {

e.printStackTrace();

}

}

}

static class Container{

//StringBuffer wrap = new StringBuffer();

static int userCount = 0;//當(dāng)前用戶量

private int now = 0;//已轉(zhuǎn)發(fā)量

private String[] strs = new String[1024];//消息隊列

private int i = 0;//消息計數(shù)器

public void add(String message) {

strs[i]=message;

i++;

}

public static void doCount() {//用戶量加一

userCount++;

}

public void subUserCount() {//用戶量減一

userCount--;

}

public void reset() {

if(now == userCount) {

strs = new String[1024];

now = 0;

}

}

}

static class Receiver implements Runnable{

private boolean flag = true;

private Container container;

private DataInputStream dis;

public Receiver(Socket client,Container container) {

this.container = container;

try {

dis = new DataInputStream(client.getInputStream());

} catch (IOException e) {

e.printStackTrace();

}

}

//讀取消息

public void readMessage() {

try {

//存入容器

String str = "";

if(!(str = dis.readUTF()).equals("")) {

container.add(str);

}

} catch (IOException e) {

flag = false;

System.err.println("Read:用戶已離開會話");

container.subUserCount();

}

}

public void run() {

while(flag) {

readMessage();

}

}

}

//轉(zhuǎn)發(fā)

static class Transmit implements Runnable{

private boolean flag = true;

private Container container;

private DataOutputStream dos;

public Transmit(Socket client, Container container) {

this.container = container;

try {

this.dos = new DataOutputStream(client.getOutputStream());

} catch (IOException e) {

flag = false;

System.err.println("Transmit:用戶已離開會話");

}

}

public void run() {

while(flag) {

transmit();

try {

Thread.sleep(500);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public void transmit() {

for(String str : container.strs) {

try {

if(str==null) {

continue;

}

System.out.println("已轉(zhuǎn)發(fā)消息:"+str);

container.now++;

dos.writeUTF(str);

dos.flush();

} catch (IOException e) {

e.printStackTrace();

}

}

container.reset();//轉(zhuǎn)發(fā)完后清空

}

}

}

演示

服務(wù)器端運行一個,客戶端運行多個。

總結(jié)

以上是生活随笔為你收集整理的c语言tcp多线程聊天室,66 网络编程(五)——TCP多线程实现多人聊天室的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产午夜不卡 | 成人漫画网站 | 亚洲午夜网 | 国产精久久久久久 | 国产片91| 在线不卡一区 | 免费一区二区在线观看 | 流白浆视频 | 国产精品一区二区三区在线播放 | 久久久久久久黄色片 | 短视频在线观看 | 十八禁毛片 | 亚洲少妇精品 | 五月在线 | 黄色片18 | 欧美不卡视频在线观看 | 丰满人妻一区二区三区46 | 女女调教被c哭捆绑喷水百合 | 丰满的人妻hd高清日本 | 国产suv精品一区二区三区 | av在线短片 | 国产情侣呻吟对白高潮 | avt天堂网 | 中文在线不卡视频 | 99精品欧美 | h网站在线看| 久久不卡| 日韩理论在线观看 | 亚洲一区在线视频观看 | 7777精品久久久久久 | 亚洲一区二区三区在线观看视频 | 亚洲午夜精选 | 日日夜精品 | 综合色视频| 国产亚洲精品美女久久久 | 深夜网站在线观看 | 成人免费毛片日本片视频 | 亚州色图欧美色图| 人人人干 | 精品66| 亚洲精品成人av | 97人妻天天摸天天爽天天 | 99热| 日韩在线观看视频一区 | 亚洲精品国产熟女久久久 | 亚洲精品~无码抽插 | 色女人影院 | 日日夜夜爱爱 | 青青草这里只有精品 | 九色网站在线观看 | 最近中文字幕mv免费高清在线 | 成人网站在线进入爽爽爽 | 91亚洲免费 | 91性高潮久久久久久久 | 99在线观看免费 | 久久久久久久久久久久国产 | 青青伊人精品 | 浓精喷进老师黑色丝袜在线观看 | 成人黄色免费观看 | 麻豆成人免费视频 | 国产主播精品 | 亚洲福利二区 | 久久精品伦理 | 色图社区| 黄免费在线观看 | 日韩电影精品 | 日本一区二区三区视频在线播放 | 国产精品美女久久久久图片 | 三级在线网站 | 在线播放一区 | 伊人成年网 | 天天狠天天插天天透 | 欧美视频综合 | 激情国产在线 | 亚洲国产黄色片 | 第四色成人网 | 国产一区二区免费在线 | 热久久影院| 亚洲精品视频一区二区三区 | 韩国伦理av | 黄色小视频大全 | yes4444视频在线观看 | brazzers精品成人一区 | 日本妇女毛茸茸 | 天天激情综合 | 99看片| 啊灬啊灬啊灬秀婷 | 一本视频在线 | 亚洲AV无码国产精品国产剧情 | 亚洲一区二区在线电影 | 中文字幕在线视频播放 | se欧美 | 亚洲精品国产精品乱码视色 | 国产欧美综合在线 | 色图社区 | 亚洲丝袜在线视频 | 伊人黄网 | 亚洲第一黄网 | 欧美色图校园春色 |