2013-05-04 230 views
1

我想給通過TCP連接字符串:發送和接收純文本與TCP

TR220,2,A10000XX,3545.1743,5119.5794,001.0,1503,52:56:16,2012/09/13,0,0,0,0,0,V,000,0,0,0,,+989123456789,*

我使用此代碼來發送的文字:

string uri = "http://localhost:1414"; 
String record = "TR220,2,A10000XX,3545.1743,5119.5794,001.0,1503,52:56:16,2012/09/13,0,0,0,0,0,V,000,0,0,0,,+989123456789,*"; 
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(uri); 
request.Method = "POST"; 
byte[] postBytes = GetBytes(record); 
request.ContentType = "text/plain"; 
request.ContentLength = postBytes.Length; 
Stream requestStream = request.GetRequestStream(); 
requestStream.Write(postBytes, 0, postBytes.Length); 

和GetBytes方法:

private byte[] GetBytes(string str) 
{ 
    byte[] bytes = new byte[str.Length * sizeof(char)]; 
    System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length); 
    return bytes; 
} 

發送此請求後,在對方的應用程序,我得到th是字符串:

POST/HTTP/1.1\r\nContent-Type: text/plain\r\nHost: localhost:1414\r\nContent-Length: 212\r\nExpect: 100-continue\r\nConnection: Keep-Alive\r\n\r\n 

使用的代碼塊:

tcpListener = new TcpListener(IPAddress.Any, 1414); 
listenThread = new Thread(new ThreadStart(ListenForClients)); 
listenThread.Start(); 

和ListenForClients方法(一些代碼爲清楚起見省略):

NetworkStream clientStream = tcpClient.GetStream(); 
byte[] message = new byte[4096]; 
int bytesRead; 
while (true) 
{ 
    bytesRead = 0; 
    try { bytesRead = clientStream.Read(message, 0, 4096); } 
    catch { break; } 
    ASCIIEncoding encoder = new ASCIIEncoding(); 
    String data = encoder.GetString(message, 0, bytesRead); 
    MessageReceived(data); 
} 

我的問題是爲什麼發送和接收的字符串是不一樣?

+0

任何你需要在發送端使用HTTP的原因?你會碰到其他實際上是HTTP服務器的服務器嗎? – Slugart 2013-05-04 07:29:44

+0

我使用了完全相同的代碼,並收到了標題和正文。 HTTPWebRequest類將始終添加HTTP標頭,因爲它是HTTP協議的一部分。 – Slugart 2013-05-04 07:40:37

回答

2

你確定你知道你在做什麼嗎?你正在發送HTTP包到一個原始的TCP套接字,當然你會得到你的真正有效載荷的HTTP協議字符串。兩端使用相同類型的插座,否則最終會發瘋。

這是稍微舊的,但似乎足夠滿足您的需要,像往常一樣:Google是你的朋友。

http://www.codeproject.com/Articles/12893/TCP-IP-Chat-Application-Using-C

至於爲什麼TCP套接字正在接收順利HTTP連接? HTTP是通過TCP運行的,它只是一個正式的協議。