伺服器開發 Socket通訊例項(二)

2021-06-10 11:10:11 字數 2294 閱讀 6473

客戶端的例子過程比較簡單

1、先建立socket

2、建立connect

3、接收/傳送

注意是接收是阻塞模式

客戶端**:

chatclient.cpp

/*

* chatclient.cpp

* * created on: 2012-9-29

* author: root

*/#include "clientsocket.h"

#include "socketexception.h"

#include #include #include "encoder.h"

#include "decoder.h"

using namespace std;

int main() ";

clientsocket clientsocket("127.0.0.1",888000);

// string massage=encoder::encoder(strvalue);

// cout << decoder::decoder(massage) << endl;

while(1)

}catch (socketexception& e)

return 0;

}

decoder.h 解析資料

解析資料是必需的,因為socket機制會優先傳送的機制,從而導致粘包現在(將兩次小資料當作一次來),其中有兩種解決方法,一種是設定setsocketopt,不支援nagle演算法,第二就是進行對包封裝,一般是計算資料長度,並加入到包頭,解析時就先解析包頭的長度,接下來就一直接收到該 長度就可得到「剛好」的資料

/*

* decoder.h

* * created on: 2012-10-18

* author: root

*/#ifndef decoder_h_

#define decoder_h_

#include class decoder ;

#endif /* decoder_h_ */

decoder.cpp 解析資料實現類

/*

* decoder.cpp

* * created on: 2012-10-18

* author: root

*/#include "decoder.h"

#include "typeconvert.h"

decoder::decoder()

decoder::~decoder()

std::string decoder::decoder(std::string message)

std::string datalengstr = message.substr(0, 4);

int dataleng = typeconvert::strint2int(datalengstr);

if (dataleng > length - 4)

return message.substr(4, length - 4);

}

encoder.h 加密資料

/*

* encoder.h

* * created on: 2012-10-18

* author: root

*/#ifndef encoder_h_

#define encoder_h_

#include class encoder ;

#endif /* encoder_h_ */

encoder.cpp 加密資料類

/*

* encoder.cpp

* * created on: 2012-10-18

* author: root

*/#include "encoder.h"

#include "typeconvert.h"

#include encoder::encoder()

encoder::~encoder()

std::string encoder::encoder(std::string message) else if (length < 100) else if (length < 1000)

return (lenstr + message);

}

socket通訊例項 GUI

效果展示 專案 客戶端 public class client extends jframe implements runnable catch ioexception e 判斷連線是否建立 if socket.isconnected 初始客戶端 private void initclient 訊息...

socket的簡單通訊例項

分為服務端和客服端,先看服務端吧 做乙個控制台程式,using system using system.collections.generic using system.text using system.net using system.net.sockets namespace socket r...

Android與伺服器Socket通訊

最近在做乙個專案,需要用到socket通訊呼叫介面,發現了乙個很奇怪的問題,在呼叫介面後5分鐘1秒後才返回結果,這肯定是存在問題的,debug發現 停滯在這一句socket.getinputstream 於是我檢查了下 發現outstream.flush 了啊,後面我就很鬱悶了,但是也接觸不到服務端...