UDP通訊基礎(聊天室)
//主函式
package chat;
import java.net.DatagramSocket;
import java.net.SocketException;
public class Chartdemo {
/**
* @param args
*/
public static void main(String[] args) {
try {
DatagramSocket send=new DatagramSocket();
/*
* 接收資料必須要有一個埠
*/
DatagramSocket recive=new DatagramSocket(10001);
new Thread(new Send(send)).start();
new Thread(new Recive(recive)).start();
} catch (SocketException e) {
e.printStackTrace();
}
}
}
//傳送端
package chat;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Send implements Runnable {
DatagramSocket socket = null;
public Send(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
BufferedReader in = null;
try {
/*
* 從鍵盤讀取資料
*/
in = new BufferedReader(new InputStreamReader(System.in));
String string = null;
byte[] buf = null;
while ((string = in.readLine()) != null) {
buf = string.getBytes();
/*
* 廣播發送資料
*/
DatagramPacket dp = new DatagramPacket(buf, buf.length,
InetAddress.getByName("192.168.1.255"), 10001);
socket.send(dp);
/*
* 退出聊天
*/
if("886".equals(string))
{
break;
}
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//接收端
package chat;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Recive implements Runnable {
DatagramSocket socket = null;
public Recive(DatagramSocket socket) {
this.socket = socket;
}
@Override
public void run() {
DatagramPacket dp=null;
try {
while(true)
{
byte[]buf=new byte[1024];
dp=new DatagramPacket(buf, buf.length);
/*
* 阻塞接收資料
*/
socket.receive(dp);
/*
*把獲取的資料打印出來
*/
String ip=dp.getAddress().getHostAddress();
String message=new String(dp.getData(),0,dp.getLength());
System.out.println(ip+"說:"+message);
if("886".equals(message))
{
System.out.println(ip+":已經退出");
break;
}
}
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
相關推薦
UDP通訊基礎(聊天室)
//主函式 package chat; import java.net.DatagramSocket; import java.net.SocketException; public class Chartdemo { /** * @param args */ public static void main
C#Socket多執行緒通訊(聊天室)
網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個連線的一端稱為一個socket 一般有兩個端,一個伺服器端(ServerScoket)一個客戶端(ClientSocket) Socket是tcp\ip網路協議介面。內部定義了許多的函式和例程。可以看成是網路通訊的一
實現在同一臺伺服器上登入的ssh使用者的群聊(聊天室)功能
直接上程式碼了,註釋還算清晰,有問題歡迎提問指證。 為方便下載編譯,程式碼都放到一個檔案裡了。 伺服器是CentOS,客戶端用的secureCRT。 /* 功能: 在同一臺伺服器上ssh登入的使用者可以群聊(聊天室) 原理: 1、通過roomNo.來區分不同的房間或群組; 2
C#Socket通訊基礎(非同步Socket通訊UDP)
一、通訊原理參考https://blog.csdn.net/xiaochenXIHUA/article/details/83446031。 非同步通訊解決同步通訊的缺點可以雙向傳送和接收資訊;非同步通訊思路是引入多執行緒機制,在一個程序中使用兩個執行緒,分別處理接收執行緒與傳送執行緒,這種機制稱
C#Socket通訊基礎(同步Socket通訊UDP)
一、UDP通訊原理 UDP協議使用無連線的套接字,因此不需要再網路裝置之間傳送連線資訊,但是必須用Bind方法繫結到一個本地地址/埠上。 ①建立套接字 ②繫結IP地址和埠作為伺服器端 ③直接使用SendTo/ReceiveFrom來執行操作 注意:同步Socket(UDP)通訊存
Linux下基於UDP協議實現的聊天室專案(附原始碼)
好久沒來更新了,這段時間一直在著手完成這個專案,由於之前沒有接觸過這種稍大型的專案,而且對於C/S架構以及UDP通訊的瞭解也不是很深,所以前面很大的一段時間都被浪費掉了,做了很大無用功。 剛開始弄的時候,也是在網上搜了很多資料,找了很多版本,發現大都有
Java——WebSocket的使用(Demo:聊天室)
get session ebs nop bsp inf 註意 post style 1、建立WebSocket連接(調用OnOpen方法) 1)建立websocket連接 2)為集合中添加當前對象(註意線程安全) 3)廣播消息 2、斷開Ws連接(當關閉ws連接的時候會
C#Socket通訊基礎(非同步Socket通訊TCP)伺服器與客戶端
一、效果圖 二、伺服器端程式碼(原始碼下載地址:https://download.csdn.net/download/xiaochenxihua/10748789) using System; using System.Collections.Generic; using System
Linux:實現程序間的群聊(類似於聊天室)
思路: 運用共享記憶體來儲存當前聊天的人數,訊息佇列來儲存訊息,執行緒來實現讀取。 先通過create.c來建立共享記憶體,並初始化 在chat.c中實現資訊的讀取,在主函式中將訊息寫進訊息佇列中,建立執行緒來實現訊息的讀取。 每執行一次chatc.c檔案,共享記憶
Socket網路通訊基礎(第八天)
什麼是網路模型 網路程式設計的本質是兩個裝置之間的資料交換,當然,在**計算機網路**中,裝置主要指計算機。資料傳遞本身沒有多大的難度,不就是把一個裝置中的資料傳送給兩外一個裝置,然後接受另外一個裝置反饋的資料。 現在的網路程式設計基本上都是基於請求/響應方式的
即時通訊系統中實現聊天訊息加密,讓通訊更安全【低調贈送:C#開源即時通訊系統(支援廣域網)——GGTalk4.5 最新原始碼】
在即時通訊系統(IM)中,加密重要的通訊訊息,是一個常見的需求。尤其在一些政府部門的即時通訊軟體中(如稅務系統),對即時聊天訊息進行加密是非常重要的一個功能,因為談話中可能會涉及到機密的資料。我在最新的GG 4.5中,增加了對即時聊天訊息進行加密的功能,但這一功能並不是強制的,可以通過開關來進行控制。本文
Asp.NET MVC 使用 SignalR 實現推送功能一(Hubs 線上聊天室)
簡介 ASP .NET SignalR 是一個ASP .NET 下的類庫,可以在ASP .NET 的Web專案中實現實時通訊。什麼是實時通訊的Web呢?就是讓客戶端(Web頁面)和伺服器端可以互相通知訊息及呼叫方法,當然這是實時操作的。 WebSockets是HTML5提供的新的API
QT學習之路十三(基於Linux qt的聊天室)
前天將Windows下的聊天室改版了,但是我昨天才發現那個版本有一個缺陷,一個我一開始沒有注意到的錯誤,直到昨天除錯的時候才發現,就是我資料傳輸的時候是用std::string型別的,一開始是為了
QT學習之路十二(基於Windows qt的聊天室)
這幾天一直在將之前的聊天室改版,客戶端用qt寫,伺服器用Windows API和c++寫,期間遇到很多挫折,很多bug,甚至有過想要放棄的念頭,幸好,上天眷顧,經過了4、5天的時間,終於找到了錯誤所
Nodejs基礎(5-6)HTTP概念進階
code 數據 才會 cti 異步io 接口 tint 磁盤 資源 1、什麽是回調? 是異步編程最基本的方法,對於nodejs來說需要按順序執行異步邏輯的時候一般采用後續傳遞的方式,也就是將後續邏輯封裝在回調函數中作為起始函數的參數逐層去嵌套。通過這種方式來讓程序按照我們期
java基礎(六章)
while nbsp 開關 while循環 次數 tro 判斷 進行 一次 一、for循環的使用場合 l while循環——先判斷,再循環 while(1、條件表達式){ //2、循環操作 //3、更改循環條件表達式 } l do…while——先循
java基礎(八章)
int 賦值 移動 strong 讀取 () 聲明數組 位置 使用 一、 什麽是數組及其作用? 定義:具有相同數據類型的一個集合 作用:存儲連續的具有相同類型的數據 二、 java中如何聲明和定義數組 l 聲明和定義的語法: 數
java基礎(三章)
sign 邏輯運算符 .com 數字 一行代碼 分解 shift com http java基礎(三章) 一、基本if結構 1、流程圖 l 輸入輸出 l 判斷和分支 l 流程線 1.1 簡單的if條件判斷 if(表達式){
java基礎(二章)
ttext 關系 運算 pos 不能 string 取模 符號 表達式 java基礎(二章) 一,變量 1.變量是內存中的一個標識符號,用於存儲數據 2.變量命名規則 l 必須以字母、下劃線 _ 、美元符號 $ 開頭 l 變量中,可以包括數字 l 變量中,不能出現
java基礎(一章)
.class strong 創建 命令 語言 public 對象 企業 tex java基礎(一章) 1、 java是一種面向對象的高級編程語言。 2、 java包括: javase(java基礎)