日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

利用 socket 获取 tcp 包并解析的问题。

發布時間:2023/11/27 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用 socket 获取 tcp 包并解析的问题。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

服務器端代碼如下:(Java Servlet 實現)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
?OutputStream out = response.getOutputStream();
??????? try {
??????????????? response.setContentType("image/png");
??????????????? ChartUtilities.writeChartAsPNG(out, chart, 400, 300);? // 將圖片寫入out中
??????????????? response.flushBuffer();?
??????? }
??????? catch (Exception e) {
??????????? System.err.println(e.toString());
??????? }
??????? finally {
??????????? out.close();
??????? }
}



// 以下是客戶端代碼,通過socket取出TCP包,并解析

??????? string request = "GET /PDAChart/ChartServlet?Chart=PieChart HTTP/1.1\r\n" +? // 請求消息
???????????????????????? "Host: " + server + ":" + port.ToString() + "\r\n" +? // 主機和端口
???????????????????????? "Connection: Close\r\n" +?? // 連接狀態
???????????????????????? "\r\n";
??????? Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
??????? Byte[] bytesReceived = new Byte[256];

??????? // 創建Socket對象
??????? Socket s = ConnectSocket(server, port);

??????? if (s == null)
??????????? return ("Connection failed");

// 向服務器發送請求
s.Send(bytesSent, bytesSent.Length, 0);

// 接收服務器頁面內容
int bytes = 0;
string page = "Default HTML page on " + server + ":\r\n";

// 安裝一定的塊接收數據
do
{
bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
page = page + Encoding.ASCII.GetString(bytesReceived, 0, bytes); // 將數據轉換為字符串
}
while (bytes > 0);

/

// 解析 tcp包 查找\r\n\r\n
int index = page.IndexOf("\r\n\r\n");
Console.WriteLine(page.Substring(0,index)); // 取出TCP包頭

// 當TCP包體的內容也是文本的時候,沒有問題
Console.WriteLine(page.Substring(index + 4)); // 輸出包體

// 問題是當包體是圖片的時候,該怎么處理呢????
// 我是這樣考慮的:scoket接收的時候,已經將byte安裝ASCII轉換成string,這里將string轉換為byte,然后存成文件。
// 問題是最后存成的文件用圖片查看器打開以后是空的,什么都看不到。不過文件的大小是有的13k。
Byte[] byteArray = Encoding.ASCII.GetBytes(page.Substring(index + 4)); // page.Substring(index + 4)為包體內容
using (BinaryWriter binWriter =
new BinaryWriter(File.Open("c:\\map.png", FileMode.Create)))
{
binWriter.Write(byteArray);
}
問題:

為什么我保存的圖片不能顯示呢?既然通過IE就可以看到圖片,就說明服務器端生成的內容是沒有問題的。希望大家多給指點。

轉載于:https://www.cnblogs.com/mjgforever/archive/2008/02/26/1082038.html

總結

以上是生活随笔為你收集整理的利用 socket 获取 tcp 包并解析的问题。的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。