老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

java雙人聊天代碼 java 多人聊天

Java如何使用UDP協議實現多人聊天?

UDP 是廣播的,如果是做實時的聊天,就開兩個線程、不需要服務器端。一個專門接收、一個做發送

歙縣網站制作公司哪家好,找成都創新互聯!從網頁設計、網站建設、微信開發、APP開發、成都響應式網站建設等網站項目制作,到程序開發,運營維護。成都創新互聯從2013年開始到現在10年的時間,我們擁有了豐富的建站經驗和運維經驗,來保證我們的工作的順利進行。專注于網站建設就選成都創新互聯

用Java實現一個人和幾個不同的人私聊,用Socket實現

package API_Day09;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;

import java.util.Scanner;

/**

* 控制臺聊天程序

* 客戶端應用程序

* @author Jacob

*

*/

public class chatClient

{

//客戶端用于與服務端連接的Socket

private Socket clientSocket;

/**

* 構造方法,客戶端初始化

*/

public chatClient()

{

try

{

/*

* socket(String host, int port)

* 地址: IP地址,用來定位網絡上的計算機

* 端口: 用來找到遠端計算機上用來連接的服務端應用程序

*/

clientSocket = new Socket("localhost",12580);

}

catch (Exception e)

{

e.printStackTrace();

}

}

/**

* 客戶端昵稱驗證方法

* @param 為Scanner

*/

private void inputNickName(Scanner scan) throws Exception

{

String nickName = null;

//創建輸出流

PrintWriter pw = new PrintWriter(

new OutputStreamWriter(clientSocket.getOutputStream(),

"UTF-8"),true);

//創建輸入流

BufferedReader br = new BufferedReader(

new InputStreamReader(

clientSocket.getInputStream(),"UTF-8"));

while(true)

{

System.out.println("請創建您的昵稱:");

nickName = scan.nextLine();

if (nickName.trim().equals(""))

{

System.out.println("昵稱不得為空");

}

else

{

pw.println(nickName);

String pass = br.readLine();

if(pass!=null!pass.equals("OK"))

{

System.out.println("昵稱已經被占用,請更換!");

}

else

{

System.out.println("你好!"+nickName+"可以開始聊天了");

break;

}

}

}

}

/*

* 客戶端啟動的方法

*/

public void start()

{

try

{

/*

* 創建Scanner,讀取用戶輸入內容

* 目的是設置客戶端的昵稱

*/

Scanner scanner = new Scanner(System.in);

inputNickName(scanner);

/*

* 將用于接收服務器端發送過來的信息的線程啟動

*/

Runnable run = new GetServerMsgHandler();

Thread t = new Thread(run);

t.start();

/*

* 建立輸出流,給服務端發信息

*/

OutputStream os = clientSocket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");

PrintWriter pw = new PrintWriter(osw,true);

while(true)

{

pw.println(scanner.nextLine());

}

}

catch(Exception e)

{

e.printStackTrace();

}

finally

{

if(clientSocket !=null)

{

try

{

clientSocket.close();

}

catch(IOException e)

{

e.printStackTrace();

}

}

}

}

/**

* 該線程體用來循環讀取服務端發送過來的信息

* 并輸出到客戶端的控制臺

* @param args

*/

class GetServerMsgHandler implements Runnable

{

@Override

public void run()

{

try

{

InputStream is = clientSocket.getInputStream();

InputStreamReader isr = new InputStreamReader(is,"UTF-8");

BufferedReader br = new BufferedReader(isr);

String msgString = null;

while((msgString = br.readLine())!= null)

{

System.out.println("服務端提示:"+ msgString);

}

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

public static void main(String[] args)

{

chatClient client = new chatClient();

client.start();

}

}

package API_Day09;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

import java.util.HashMap;

import java.util.Map;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

/**

* 控制臺聊天程序

* 服務端應用程序

* @author Jacob

*

*/

public class chatServer

{

/**

* ServerSocket 是運行在服務端的Socket

* 用來監聽端口,等待客戶端的連接,

* 一旦連接成功就會返回與該客戶端通信的Socket

*/

private ServerSocket serverSocket;

/**

* 創建線程池來管理客戶端的連接線程

* 避免系統資源過度浪費

*/

private ExecutorService threadPool;

/**

* 該屬性用來存放客戶端之間私聊的信息

*/

private MapString,PrintWriter allOut;

/**

* 構造方法,服務端初始化

*/

public chatServer()

{

try

{

/*

* 創建ServerSocket,并申請服務端口

* 將來客戶端就是通過該端口連接服務端程序的

*/

serverSocket = new ServerSocket(12580);

/*

* 初始化Map集合,存放客戶端信息

*/

allOut = new HashMapString, PrintWriter();

/*

* 初始化線程池,設置線程的數量

*/

threadPool = Executors.newFixedThreadPool(10);

/*

* 初始化用來存放客戶端輸出流的集合,

* 每當一個客戶端連接,就會將該客戶端的輸出流存入該集合;

* 每當一個客戶端斷開連接,就會將集合中該客戶端的輸出流刪除;

* 每當轉發一條信息,就要遍歷集合中的所有輸出流(元素)

* 因此轉發的頻率高于客戶端登入登出的頻率,

* 還是應該使用ArrayList來存儲元素,僅限群聊,私聊不行

* allOut = new ArrayListPrintWriter();

*/

}

catch (Exception e)

{

e.printStackTrace();

}

}

/*

* 將客戶端的信息以Map形式存入集合中

*/

private void addOut(String key,PrintWriter value)

{

synchronized(this)

{

allOut.put(key, value);

}

}

/*

* 將給定的輸出流從共享集合中刪除

* 參數為客戶端nickName,作為Map的key鍵

*/

private synchronized void removeOut(String key)

{

allOut.remove(key);

System.out.println("當前在線人數為:"+ allOut.size());

}

/*

* 將給定的消息轉發給所有客戶端

*/

private synchronized void sendMsgToAll(String message)

{

for(PrintWriter out: allOut.values())

{

out.println(message);

System.out.println("當前在線人數為:"+ allOut.size());

}

}

/*

* 將給定的消息轉發給私聊的客戶端

*/

private synchronized void sendMsgToPrivate(String nickname,String message)

{

PrintWriter pw = allOut.get(nickname); //將對應客戶端的聊天信息取出作為私聊內容發送出去

if(pw!=null)

{

pw.println(message);

System.out.println("當前在線私聊人數為:"+ allOut.size());

}

}

/**

* 服務端啟動的方法

*/

public void start()

{

try

{

while(true)

{

/*

* 監聽10086端口

*/

System.out.println("等待客戶端連接... ... ");

/*

* Socket accept() 這是一個阻塞方法,會一直在10086端口進行監聽

* 直到一個客戶端連接上,此時該方法會將與這個客戶端進行通信的Socket返回

*/

Socket socket = serverSocket.accept();

System.out.println("客戶端連接成功! ");

/*

* 啟動一個線程,由線程來處理客戶端的請求,這樣可以再次監聽

* 下一個客戶端的連接了

*/

Runnable run = new GetClientMsgHandler(socket);

threadPool.execute(run); //通過線程池來分配線程

}

}

catch(Exception e)

{

e.printStackTrace();

}

}

/**

* 該線程體用來處理給定的某一個客戶端的消息,循環接收客戶端發送

* 的每一個字符串,并輸出到控制臺

* @author Jacob

*

*/

class GetClientMsgHandler implements Runnable

{

/*

* 該屬性是當前線程處理的具體的客戶端的Socket

* @see java.lang.Runnable#run()

*/

private Socket socket;

/*

* 獲取客戶端的地址信息

* private String hostIP;

*/

/*

* 獲取客戶端的昵稱

*/

private String nickName;

/*

* 創建構造方法

*/

public GetClientMsgHandler(Socket socket)

{

this.socket = socket;

/*

* 獲取遠端客戶的Ip地址信息

* 保存客戶端的IP地址字符串

* InetAddress address = socket.getInetAddress();

* hostIP = address.getHostAddress();

*/

}

/*

* 創建內部類來獲取昵稱

*/

private String getNickName() throws Exception

{

try

{

//服務端的輸入流讀取客戶端發送來的昵稱輸出流

InputStream iin = socket.getInputStream();

InputStreamReader isr =

new InputStreamReader(iin,"UTF-8");

BufferedReader bReader = new BufferedReader(isr);

//服務端將昵稱驗證結果通過自身的輸出流發送給客戶端

OutputStream out = socket.getOutputStream();

OutputStreamWriter iosw =

new OutputStreamWriter(out,"UTF-8");

PrintWriter ipw = new PrintWriter(iosw,true);

//讀取客戶端發來的昵稱

String nameString = bReader.readLine();

while(true)

{

if(nameString.trim().length()==0)

{

ipw.println("FAIL");

}

if(allOut.containsKey(nameString))

{

ipw.println("FAIL");

}

else

{

ipw.println("OK");

return nameString;

}

nameString = bReader.readLine();

}

}

catch(Exception e)

{

throw e;

}

}

@Override

public void run()

{

PrintWriter pw = null;

try

{

/*

* 通過客戶端的Socket獲取客戶端的輸出流

* 用來將消息發送給客戶端

*/

OutputStream os = socket.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os,"UTF-8");

pw = new PrintWriter(osw,true);

/*

* 將客戶昵稱和其所說的話作為元素存入共享集合HashMap中

*/

nickName = getNickName();

addOut(nickName, pw);

Thread.sleep(100);

/*

* 服務端通知所有客戶端,某用戶登錄

*/

sendMsgToAll("[系統通知]:歡迎**"+nickName+"**登陸聊天室!");

/*

* 通過客戶端的Socket獲取輸入流

* 讀取客戶端發送來的信息

*/

InputStream is = socket.getInputStream();

InputStreamReader isr = new InputStreamReader(is,"UTF-8");

BufferedReader br = new BufferedReader(isr);

String msgString = null;

while((msgString = br.readLine())!=null)

{

//驗證是否是私聊

if(msgString.startsWith("@"))

{

/*

* 私聊格式:@昵稱:內容

*/

int index = msgString.indexOf(":");

if(index =0)

{

//獲取昵稱

String name = msgString.substring(1,index);

String info = msgString.substring(index+1,msgString.length());

info = nickName + "對你說:"+ info;

//將私聊信息發送出去

sendMsgToPrivate(name, info);

//服務端不在廣播私聊的信息

continue;

}

}

/*

* 遍歷所有輸出流,將該客戶端發送的信息轉發給所有客戶端

*/

System.out.println(nickName+"說:"+ msgString);

sendMsgToAll(nickName+"說:"+ msgString);

}

}

catch (Exception e)

{

/*

* 因為Win系統用戶的客戶端斷開連接后,br.readLine()方法讀取

* 不到信息就會拋出異常,而Linux系統會持續發送null;

* 因此這里就不在將捕獲的異常拋出了。

*/

}

finally

{

/*

* 當執行到此處時,說明客戶端已經與服務端斷開連接

* 則將該客戶端存在共享集合中的輸出流刪除

*/

removeOut(nickName);

/*

* 通知所有客戶端,某某客戶已經下線

*/

sendMsgToAll("[系統通知]:"+nickName + "已經下線了。");

/*

* 關閉socket,則通過Socket獲取的輸入輸出流也一同關閉了

*/

if(socket!=null)

{

try

{

socket.close();

}

catch(IOException e)

{

e.printStackTrace();

}

}

}

}

}

public static void main(String[] args)

{

chatServer server = new chatServer();

server.start();

}

}

我的作業,供你參考

java寫一個簡單的支持多人聊天的聊天室代碼,不要用UI圖形界面

我發現一個大蝦的BLOG里有:

你自己去看一下,對不對你的胃口哦,我對JAVA不了解?

用JAVA 編寫簡單網絡聊天程序

/**

* 基于UDP協議的聊天程序

*

* 2007.9.18

* */

//導入包

import java.awt.*;

import java.awt.event.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.*;

import java.net.*;

public class Chat extends JFrame implements ActionListener

{

//廣播地址或者對方的地址

public static final String sendIP = "172.18.8.255";

//發送端口9527

public static final int sendPort = 9527;

JPanel p = new JPanel();

List lst = new List(); //消息顯示

JTextField txtIP = new JTextField(18); //填寫IP地址

JTextField txtMSG = new JTextField(20); //填寫發送消息

JLabel lblIP = new JLabel("IP地址:");

JLabel lblMSG = new JLabel("消息:");

JButton btnSend = new JButton("發送");

byte [] buf;

//定義DatagramSocket的對象必須進行異常處理

//發送和接收數據報包的套接字

DatagramSocket ds = null;

//=============構造函數=====================

public Chat()

{

CreateInterFace();

//注冊消息框監聽器

txtMSG.addActionListener(this);

btnSend.addActionListener(this);

try

{

//端口:9527

ds =new DatagramSocket(sendPort);

}

catch(Exception ex)

{

ex.printStackTrace();

}

//============接受消息============

//匿名類

new Thread(new Runnable()

{

public void run()

{

byte buf[] = new byte[1024];

//表示接受數據報包

while(true)

{

try

{

DatagramPacket dp = new DatagramPacket(buf,1024,InetAddress.getByName(txtIP.getText()),sendPort);

ds.receive(dp);

lst.add("【消息來自】◆" + dp.getAddress().getHostAddress() + "◆"+"【說】:" + new String (buf,0,dp.getLength()) /*+ dp.getPort()*/,0);

}

catch(Exception e)

{

if(ds.isClosed())

{

e.printStackTrace();

}

}

}

}

}).start();

//關閉窗體事件

this.addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent w)

{

System.out.println("test");

int n=JOptionPane.showConfirmDialog(null,"是否要退出?","退出",JOptionPane.YES_NO_OPTION);

if(n==JOptionPane.YES_OPTION)

{

dispose();

System.exit(0);

ds.close();//關閉ds對象//關閉數據報套接字

}

}

});

}

//界面設計布局

public void CreateInterFace()

{

this.add(lst,BorderLayout.CENTER);

this.add(p,BorderLayout.SOUTH);

p.add(lblIP);

p.add(txtIP);

p.add(lblMSG);

p.add(txtMSG);

p.add(btnSend);

txtIP.setText(sendIP);

//背景顏色

lst.setBackground(Color.yellow);

//JAVA默認風格

this.setUndecorated(true);

this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

this.setSize(600,500);

this.setTitle("〓聊天室〓");

this.setResizable(false);//不能改變窗體大小

this.setLocationRelativeTo(null);//窗體居中

this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);

this.setVisible(true);

txtMSG.requestFocus();//消息框得到焦點

}

//===============================Main函數===============================

public static void main(String[]args)

{

new Chat();

}

//================================發送消息===============================

//消息框回車發送消息事件

public void actionPerformed(ActionEvent e)

{

//得到文本內容

buf = txtMSG.getText().getBytes();

//判斷消息框是否為空

if (txtMSG.getText().length()==0)

{

JOptionPane.showMessageDialog(null,"發送消息不能為空","提示",JOptionPane.WARNING_MESSAGE);

}

else{

try

{

InetAddress address = InetAddress.getByName(sendIP);

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);

ds.send(dp);

}

catch(Exception ex)

{

ex.printStackTrace();

}

}

txtMSG.setText("");//清空消息框

//點發送按鈕發送消息事件

if(e.getSource()==btnSend)

{

buf = txtMSG.getText().getBytes();

try

{

DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);

}

catch(Exception ex)

{

ex.printStackTrace();

}

txtMSG.setText("");//清空消息框

txtMSG.requestFocus();

}

}

}

java如何實現兩臺計算機聊天?

如果是指定的兩臺電腦,同時其中某一臺電腦的ip能被另一臺機器看到,那么以該臺電腦作為服務器,另一臺電腦作為客戶端,就可以用你的程序了。

如果兩臺電腦屬于不同的局域網,無法直連,那么必須通過公網上的服務器進行消息轉發


名稱欄目:java雙人聊天代碼 java 多人聊天
轉載注明:http://www.xueling.net.cn/article/doscioi.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 伊人色综合久久天天五月婷 | av在线免费资源 | 亚洲国产中文在线视频 | 成人极品影院 | 国产精品人成视频免费播放 | 亚洲高清v| 免费的色网站 | 青青草午夜色影院 | 美女草比视频 | 九九一级片| 成人福利在线看 | 人人爽人人爽人人片 | 在教室伦流澡到高潮H强圩动漫 | 国产成人欧美视频在线观看 | 中文有码亚洲制服av片 | 大地资源网高清在线观看视频 | 好大好硬好爽18禁视频 | 他揉捏她两乳不停呻吟人妻 | 100日本XXXXXXXXX | 免费久久久一本精品久久区 | 少妇AAA级久久久无码精品片 | av不卡观看| 天天躁夜夜躁狠狠久久成人网 | 少妇人妻AV无码专区 | 国产欧美日韩亚洲 | 免费精品一区二区三区在线观看 | 久久久免费看视频 | 成人a在线 | 亚洲激情一二三区 | 国产超爽超碰人人做wwwcom | 好吊妞www.84com只有这里才有精品 | 中文字幕佐山爱一区二区免费 | 亚欧洲精品视频免费观看mv在线观看 | 日本大乳免费观看久久99 | 国产精品久久久久网站 | 波多野结衣一区二区三区中文字幕 | 看欧美黄色大片 | 日日操夜夜 | 爆乳高潮喷水无码正在播放 | 黄色+视频+卡1+国产 | 亚洲va中文字幕无码久久不卡 |