欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

java代碼實(shí)現(xiàn)群鏈接 java集群怎么實(shí)現(xiàn)

java程序如何連接Mysql集群?

mysql集群是master-slaver模式,java程序當(dāng)然是鏈接master那臺(tái)機(jī)器了,slaver只是給master做輔助的。

成都創(chuàng)新互聯(lián)是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),凌云網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:凌云等地區(qū)。凌云做網(wǎng)站價(jià)格咨詢:18982081108

java群聊功能是怎么實(shí)現(xiàn)的?

直接用socket和servsocket開(kāi)發(fā)。命令行形式,改造成可視化的話,需要拆分功能。懶。

主要思路:

客戶端 連接到服務(wù) 獲取輸入輸出流。分別用2個(gè)線程處理輸入流和輸出流。

服務(wù)端 使用Set集合保存socket信息。同時(shí)使用線程安全Queue保存接收到的message。使用一個(gè)線程處理輸入流,并將接到的封裝成一個(gè)Message對(duì)象放到Queue中,對(duì)象保存連接的socket信息。另開(kāi)一個(gè)線程用于從Queue獲取消息,然后分發(fā)消息到Set中socket。

只是一個(gè)粗糙的即時(shí)聊天室。無(wú)緩沖功能。新用戶加入進(jìn)來(lái)不能獲取以前的消息。只能獲取加入后的其他人再發(fā)送的消息。

像這樣:服務(wù)端測(cè)試:message中socket標(biāo)識(shí)消息來(lái)源。

使用三個(gè)客戶端測(cè)試:

java 實(shí)現(xiàn)群聊和 私聊 群聊會(huì)實(shí)現(xiàn) 但是私聊?

服務(wù)器 端 使用個(gè)鏈表把在線用戶賬號(hào)和他對(duì)應(yīng)的鏈接保存起來(lái)。例如 soket。

之后 定義一個(gè)協(xié)議,

在 客戶端發(fā)出來(lái)的 聊天信息前面添加一個(gè)頭。

例如,1表示群聊,2表示私聊,3表示添加好友,等等。每一個(gè)行為對(duì)應(yīng)一個(gè)編碼超過(guò)10個(gè)可以使用字母。

群聊的話,沒(méi)什么好說(shuō),每個(gè)人發(fā)一個(gè);

私聊,那么接下來(lái)的一個(gè)字符可以表示,私聊對(duì)象的賬戶名 的長(zhǎng)度,比如 tom的 長(zhǎng)度就是3,

之后,根據(jù)長(zhǎng)度,截取 第3到第5個(gè)字符,截取到 此次 私聊信息是發(fā)送給 tom 的。

這條發(fā)送給服務(wù)器,希望他轉(zhuǎn)發(fā)給tom的 消息就應(yīng)該是

"23tom你好!"

之后去鏈表里面找tom 的soket 鏈接。打開(kāi)他的 輸出流,給他傳送 聊天信息。

歡迎追問(wèn)。

java網(wǎng)絡(luò)五子棋群聊是怎么實(shí)現(xiàn)的??急?。?!yc_wzl@163點(diǎn)抗

一樓的思路是正確的,我給你代碼參考!

GroupChat_Server.java

--------------------------------------------------------------------------

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java點(diǎn)虐 .ServerSocket;

import java點(diǎn)虐 .Socket;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class GroupChat_Server {

static DataOutputStream dataouts;

static int count = 0;

//創(chuàng)建一個(gè)集合類的數(shù)組,存放客戶端的對(duì)象

public static ArrayListSocket socketList = new ArrayListSocket();

public static void main(String[] args) {

try {

ServerSocket server = new ServerSocket(3999);//開(kāi)設(shè)服務(wù)器端口3999

JOptionPane.showMessageDialog(null, "服務(wù)器啟動(dòng)成功");

while (true) {

Socket s = server.accept();//等待客戶端的連接

dataouts = new DataOutputStream(s.getOutputStream());

count++;

dataouts.writeUTF("Connection successful,Welcome! "+s.toString()+" The "+count+" Client.");

socketList.add(s);//把連接成功的Socket對(duì)象存進(jìn)數(shù)組

new Thread(new ServerThread(s)).start();//為每個(gè)客戶端創(chuàng)建一個(gè)進(jìn)程

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

class ServerThread implements Runnable {

Socket s = null;

DataInputStream datain = null;

public ServerThread(Socket s) {

this.s = s;

try {

datain = new DataInputStream(s.getInputStream());//獲取客戶端發(fā)來(lái)的數(shù)據(jù)

} catch (IOException e) {

e.printStackTrace();

}

}

public void run() {

try {

String content = null;

while ((content = readFromClient()) != null) {

for (Socket s : GroupChat_Server.socketList) {//遍歷數(shù)組

DataOutputStream dataout = new DataOutputStream(

s.getOutputStream());

dataout.writeUTF(content);

dataout.flush();//將緩沖區(qū)的數(shù)據(jù)全部輸出!

}

}

} catch (IOException e) {

e.printStackTrace();

}

}

private String readFromClient() {//封裝客戶端發(fā)來(lái)的數(shù)據(jù)

try{

return datain.readUTF();

}catch(IOException e){

GroupChat_Server.socketList.remove(s);

}

return null;

}

}

--------------------------------------------------------------------------

GroupChat_Client.java

import javax.swing.*;

import javax.swing.border.TitledBorder;

import java.awt.BorderLayout;

import java.awt.Container;

import java.awt.FlowLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.io.*;

import java點(diǎn)虐 .BindException;

import java點(diǎn)虐 .Socket;

import java點(diǎn)虐 .SocketException;

@SuppressWarnings("serial")

public class GroupChat_Client extends JFrame {

JPanel p1, p2, p3, p4;

JTextArea Txt, SentTxt;

JTextField name;

JButton connection, submit, accept;

TitledBorder title, border;

JLabel conMessage;

DataOutputStream dataout;

DataInputStream datain;

ClientThread ct;

public GroupChat_Client() {

super("---Chat Client---");

setLayout(new BorderLayout());

p1 = new JPanel();

p2 = new JPanel();

p3 = new JPanel();

p4 = new JPanel();

Container frame = getContentPane();

Txt = new JTextArea(16, 50);

JScrollPane getText = new JScrollPane(Txt);

Txt.setEditable(false);

p1.add(getText);

SentTxt = new JTextArea(3, 36);

JScrollPane SentText = new JScrollPane(SentTxt);

connection = new JButton("Connection");

submit = new JButton(" Sent ");

p2.setLayout(new BorderLayout());

p2.add(connection, "West");

p4.setLayout(new FlowLayout(0));

p4.add(new JLabel("Message:"));

p4.add(SentText);

p2.add(p4);

p2.add(submit, "East");

p3.setLayout(new GridLayout(4, 1));

conMessage = new JLabel(

"htmlbodyp服務(wù)器還沒(méi)有啟動(dòng)!/p br p請(qǐng)啟動(dòng)服務(wù)器.../pbody/html",

0);

name = new JTextField();

name.setText("客戶端["+GroupChat_Server.count+"]");

p3.add(new JLabel(" 歡迎使用,請(qǐng)?jiān)O(shè)置呢稱: ", 0));

p3.add(name);

p3.add(conMessage);

p3.add(new JLabel(

"htmlbody--DESIGN BY:LiXiaoFei-- br --CopyRight 2012--body/html",

0));

title = new TitledBorder("消息框");

border = new TitledBorder("");

p1.setBorder(title);

p2.setBorder(border);

p3.setBorder(new TitledBorder("狀態(tài)欄"));

frame.add(p1);

frame.add(p2, "South");

frame.add(p3, "East");

setSize(750, 450);

setLocationRelativeTo(getOwner());

setResizable(false);

setVisible(true);

setDefaultCloseOperation(EXIT_ON_CLOSE);

// 事件監(jiān)聽(tīng)

connection.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

ct = new ClientThread(GroupChat_Client.this);

GroupChat_Client.this.setClient(ct);

}

});

submit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

try {

ct.Sent();

} catch (NullPointerException e1) {

JOptionPane.showMessageDialog(null, "還沒(méi)有連接服務(wù)器!");

}

}

});

}

public void setClient(ClientThread ct) {

this.ct = ct;

}

public static void main(String[] args) {

new GroupChat_Client();

}

}

class ClientThread extends Thread {

Socket connection;

DataOutputStream dataout;

DataInputStream datain;

GroupChat_Client k;

public ClientThread(GroupChat_Client k) {

this.k = k;

try {

connection = new Socket("127.0.0.1", 3999);

k.conMessage.setText("與服務(wù)器連接成功...");

dataout = new DataOutputStream(connection.getOutputStream());

datain = new DataInputStream(connection.getInputStream());

} catch (BindException e) {

JOptionPane.showMessageDialog(null, "已連接!");

} catch (IOException e) {

}

start();

}

public void run() {

String msg = null;

while (true) {

try {

msg = datain.readUTF();

} catch (SocketException e) {

JOptionPane.showMessageDialog(null, "連接斷開(kāi)!");

break;

} catch (IOException e) {

e.printStackTrace();

}

if (msg != "" msg.trim() != "") {

k.Txt.append(msg + "\n");

}

}

}

void Sent() {

try {

if (k.SentTxt.getText().equals("")) {

JOptionPane.showMessageDialog(null, "請(qǐng)輸入信息!");

} else {

dataout.writeUTF(k.name.getText()+":" + k.SentTxt.getText());

k.SentTxt.setText("");

}

} catch (IOException e) {

JOptionPane.showMessageDialog(null, "連接失敗!");

e.printStackTrace();

} catch (NullPointerException e1) {

JOptionPane.showMessageDialog(null, "連接失敗!");

}

}

}

網(wǎng)頁(yè)標(biāo)題:java代碼實(shí)現(xiàn)群鏈接 java集群怎么實(shí)現(xiàn)
網(wǎng)站URL:http://chinadenli.net/article20/ddeejjo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、定制網(wǎng)站營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站營(yíng)銷、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都app開(kāi)發(fā)公司