常見問題: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...