JAVA網路程式設計實現簡單聊天室

2021-09-02 08:14:58 字數 4206 閱讀 7073

public

class

client

}catch

(ioexception e)}}

).start()

;//輸出接收的訊息

newthread((

)->

}catch

(ioexception e)}}

).start()

;}}

客戶端需要兩個執行緒同時工作,乙個執行緒從控制台讀取資料,乙個執行緒將從伺服器返回的資料顯示在控制台上。

伺服器**

public

class

task

implements

runnable

@override

public

void

run(

)catch

(ioexception e)

}private

static

void

handle

(socket socket)

throws ioexception

}//讀取內容

l = in.

read

(bt)

; s2 =

newstring

(bt,

0,l)

;//響應輸出

outputstream out1 = sockett.

getoutputstream()

; out1.

write

((map.

get(socket)

+":"

+s2)

.getbytes()

);break

;case

"3": l = in.

read

(bt)

; s2 =

newstring

(bt,

0,l)

;for

(socket socket1 : sockets)

break

;case

"4":

string s3=map.

get(socket)

; map.

remove

(socket)

; system.out.

println

(s3+

"離開了");

thread thread =thread.

currentthread()

; thread.

stop()

;}}}

//建立連線

private

static

void

login

(socket socket)

throws ioexception

catch

(ioexception e)

}}

public

class

server

}}

在實現過程中,每次先給伺服器傳送請求代號。如果是1則伺服器之間返回map資訊,如果是2則伺服器再接受兩條資訊,分別是傳送物件和資訊內容,如果是3則伺服器再接受資訊內容。

一般客戶端-伺服器程式設計應該使用同一的協議,而且客戶端與伺服器的接受和傳送內容很相似,可以抽象為乙個父類,只是接受資訊後的處理不同。而子類只需要完成接受後的處理操作就好。

協議:先傳送乙個位元組的請求代號,然後傳送兩個位元組的訊息長度,最後傳送訊息。

抽象父類

public

abstract

class

abstractcs

int hi = in.

read()

;int lo = in.

read()

;int length =

(hi <<8)

+ lo;

byte

content =

newbyte

[length]

; in.

read

(content)

; string str =

newstring

(content,

"utf-8");

handle

(socket, out, cmd, str);}

}//傳送訊息

protected

void

send

(outputstream out,

int cmd, string content)

throws ioexception

//自定義接受訊息後的處理

protected

abstract

void

handle

(socket socket, outputstream out,

int cmd, string str)

throws ioexception;

}

客戶端

public

class

client

extends

abstractcs

public

void

start()

throws ioexception

catch

(ioexception e)})

.start()

;// 第二個執行緒負責接收伺服器端的輸入

newthread((

)->

catch

(ioexception e)})

.start()

;}@override

protected

void

handle

(socket socket, outputstream out,

int cmd, string content)

throws ioexception

}protected

void

input

(scanner scanner, outputstream out)}}

catch

(ioexception e)

}}

伺服器

public

class

server

extends

abstractcs

public

void

start()

catch

(socketexception ex)

catch

(ioexception e)})

;}}catch

(ioexception e)

}private map

map =

newconcurrenthashmap

<

>()

;@override

protected

void

handle

(socket socket, outputstream out,

int cmd, string content)

throws ioexception

catch

(ioexception e)})

;break

;case4:

string[

] array = content.

split

(" ");

string n = array[0]

;// 對方的名字

string c2 = array[1]

;// 內容

boolean found =

false

;for

(map.entry

entry :map.

entryset()

)}if(

!found)

break;}

}}

簡單網路聊天室實現

簡單網路聊天室實現 by clin003 from http clin003.com 或http blog.csdn.net clin003 學習目的 初步認識網路程式設計概念 認識執行緒的型別的宣告及實現 設計乙個簡單的s c模式結合的聊天程式 進一步認識元件的使用 實現部分 定義乙個執行緒型別t...

UCsocket 程式設計,簡單聊天室實現

tcp聊天室 客戶端 include include include include include include include include include 一些準備工作 char ip 172.30.11.104 本機位址,回送位址,用於網路軟體測試 或本機通訊 short port 10...

網路程式設計 簡易聊天室

問題背景 多數程式猿使用scoket關鍵字有什麼用途。什麼是網路程式設計?通過使用套接字來達到程序間通訊目的的程式設計就是網路程式設計,網路程式設計最主要的工作就是在傳送端把資訊通過規定好的協議進行組裝包,在接收端按照規定好的協議把包進行解析,從而提取出對應的資訊,達到通訊的目的!中間最主要的就是資...