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