java聊天室常見錯誤解析

2021-09-14 05:00:14 字數 1449 閱讀 4338

常見問題:1.訊息傳送成功,對方接收不到

2.出現亂碼

3.伺服器能接收到資料,但**失敗

出現以上問題絕對是輸出輸入沒有處理好,比如下面情況會出現亂碼甚至接收不到資料:寫入是cout.write((byte)ch);讀取是din.readutf()。發現寫入的是位元組,卻來讀取字元,豈不怪哉!

正確寫法:(說到底就是要你 怎麼傳送怎麼接收)

第一種:

//傳送

string message="要傳送的字";

outputstream out=null;

dataoutputstream dos=null;

out=socket.getoutputstream();

dos=new dataoutputstream(out);

dos.writeutf(message);//傳送資料型別是字串

dos.flush();

//接收

inputstream in=null;

datainputstream din=null;

in=socket.getinputstream();

din=new datainputstream(in);

message = din.readutf();

第二種:

//傳送

out=clientsocket.getoutputstream();

cout=new dataoutputstream(out);

int ch;

while((ch=system.in.read())!=-1) {

cout.write((byte)ch);//傳送資料型別是位元組

if(ch=='\n') {

cout.flush();

inputstream in = clientsocket1.getinputstream();

bufferedreader sin = new bufferedreader(new inputstreamreader(in));

while((aline=sin.readline())!=null) {

system.out.print(aline);

常見問題:一般出現在群聊中

1.最後乙個開啟的客戶端永遠接收不到前面開啟的客戶端的訊息,而前面客戶端接收到自己的訊息

我這裡的問題是:伺服器端的socket定義成了全域性變數,run()執行緒中引用的socket就是最後乙個客戶端的socket,所以伺服器**訊息時永遠是傳送給前面的客戶。所以這裡的解決方法就是在run()裡面再定義乙個socket區域性變數,並接受全域性變數的socket

public void run() {

socket clientsocket1=clientsocket;

三。

AJAX 聊天室實現原理終極解析

ajax 聊天室實現原理終極解析 閒來無事,做了乙個ajax聊天室,以前一直想做乙個,因為我和幾個朋友是linux機子,儘管我們的機子上都有apache伺服器,但要傳送乙個資訊卻不是很容易,老是要借助客戶端,有時候吧linux下的qq和gtalk之類的聊天軟體太麻煩,所以呢,就寫了乙個聊天室。先說一...

AJAX 聊天室實現原理終極解析

閒來無事,做了乙個ajax聊天室,以前一直想做乙個,因為我和幾個朋友是linux機子,儘管我們的機子上都有apache伺服器,但要傳送乙個資訊卻不是很容易,老是要借助客戶端,有時候吧linux下的qq和gtalk之類的聊天軟體太麻煩,所以呢,就寫了乙個聊天室。先說一下我實現的這個聊天室的聊天模式 1...

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

public class client catch ioexception e start 輸出接收的訊息 newthread catch ioexception e start 客戶端需要兩個執行緒同時工作,乙個執行緒從控制台讀取資料,乙個執行緒將從伺服器返回的資料顯示在控制台上。伺服器 publ...