Socket連線傳送資料的一點問題
問題
在使用socket實現客戶端和服務端通訊時,傳送資料的一點小bug,即有關“\n”傳輸的問題。
問題描述
在傳輸過程中我希望服務端將”\n”這種換行符包裹在傳送的資訊內一併傳送到客戶端,這樣可以省去在客戶端解析資料後再新增這些特殊符號的步驟,但是客戶端接收到的”\n”後面的資料被客戶端解析程式解析到下一段程式碼中,如下圖結果所示:
程式碼中StringUtil.SPLIT為分割符
sendMsg = StringUtil.BROADCAST+StringUtil.SPLIT+username+"\n"+StringUtil.SPLIT+msg;
解決
在debug時發現該問題後第一想法便是取消伺服器處理“\n”,改用客戶端處理輸出,服務端只發送基本的資料。操作後問題完美解決,顯示效果如下圖:
總結
1.設計服務端時應儘可能地減少服務端對不必要資料的計算,以節約伺服器資源服務更多的使用者。
2.在使用socket連線時,資料的傳送與接收儘可能地封裝那些最基礎的資料,針對轉譯字元之類的儘可能地避免。
相關推薦
Socket連線傳送資料的一點問題
問題 在使用socket實現客戶端和服務端通訊時,傳送資料的一點小bug,即有關“\n”傳輸的問題。 問題描述 在傳輸過程中我希望服務端將”\n”這種換行符包裹在傳送的資訊內一併傳送到客戶端,這樣可以省去在客戶端解析資料後再新增這些特殊符號的步驟,但是
socket程式設計入門(1---連線socket,傳送資料 出現的錯誤)
1,socket通訊最基本的需要兩個檔案,一個是服務端檔案,另外一個是客戶端檔案。 2,客戶端檔案client.php : 服務端檔案server.php : /* +——————————- * @socket通訊整個過程 +————
GCDAsyncSocket類TCP連線傳送資料粘包怎麼辦
我用GCDAsyncSocket類建立了一個TCP連線,在ipad上執行,我是客戶端,伺服器端在另一臺windows的電腦上。我從客戶端快速的傳送資料到伺服器端的時候,發現我這邊的資料是一組一組單獨發的。但是到了伺服器
Android Socket連線(模擬心跳包,斷線重連,傳送資料等)
這兩天做了一個專案是app通過socket連線自動炒菜機,給炒菜機發指令,炒菜機接收到指令會執行相應的操作。(程式雖然做的差不多了,然而我連炒菜機長什麼樣都沒見過) 其實作為一個會做飯的程式猿,我堅信還是自己動手做的飯菜比較好吃,畢竟做飯還是很有趣的。 閒話不
java socket連線以及傳送和接收資料
/** * */ package socketTest2; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import
C++socket客戶端select非同步連線傳送接收資料
這段時間公司專案一直用網口同底層裝置互動,顧記錄下,具體見程式碼: int RFID_STANDARDPROTOCOL_API __stdcall Socket_SendAndRecv(SOCKET Socket, unsigned char * SendBuf
java modbus crc16校驗碼 socket給傳送的資料新增crc校驗碼
首先crc16校驗碼的生成的原理在上一篇部落格裡面已經說過了; 前提:xframe配置京金華伺服器的埠號,繫結ip地址和埠號 程式要實現什麼? 這個程式主要實現的是伺服器傳送資料到客戶端,然後客戶端傳送資料到伺服器端; 是一問一答的形式; 只有伺服器傳送,客戶端才會應答 傳送
socket連線讀取服務端傳的資料加校驗,儲存excel表格
import socket # 匯入 socket 模組 import time import datetime from openpyxl import Workbook,load_workbook sid=1 wb=Workbook() # sheetnames = wb.get_sheet
java利用socket實現客戶端與伺服器的連線與資料傳遞
網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個雙向鏈路的一端稱為一個 socket。socket 也就是套接字,可以用來實現不同虛擬機器或者不同計算機之間的通訊。在 Java 語言中,socket 可以分為兩種型別:面向連線的 socket 通訊協議(TCP)和麵向無連線的 socket
Socket網路程式設計之以16進位制模式傳送資料
在一些Socket測試工具,有一個功能叫做“HEX模式”,比如下面這張圖裡的Socket工具: 這次做專案碰巧需要實現一個類似的功能,程式碼如下: public byte[] ConvertHexStrToByteArray(string hexStr) { st
ZeroMQ介面函式之 :zmq_send_const – 從一個socket上傳送一個固定記憶體資料
————————————————————————————————————— zmq_send_const(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_send_const – 從一個socket上傳送一個固定記憶體資料 Synopsis in
Socket實現通訊,實時接收資料以及傳送資料
公司要做一個視訊採集socket通訊的專案,第三方服務端已經提供好了服務,讓我們對接,但是目前ui還沒有,所以就暫時先自己寫個小demo測試一下資料連線。 * 先看下佈局吧,很直觀。<?xml version="1.0" encoding="utf-8"?><
SocketChannelImpl 解析一(通道連線,傳送資料)
ThreadLocal解析 :[url]http://donald-draper.iteye.com/blog/2368159[/url]Java NIO ByteBuffer詳解:[url]http://donald-draper.iteye.com/blog/235708
spring-boot socket網路程式設計實現動態向前端頁面傳送資料
經過一週的時間和構思,終於將XX專案的最後個尾巴給解決掉了,在這裡值得鼓勵一下,但是還有些不足,希望記錄下來,以後遇到諸如此類問題可以做個參考或者是程式設計思維上的不斷進步也好。 需求描述:由於本系統開發是有我全部開發的一個數據全部要對接XX平臺的資料,本系統的核心資料全部是來源於此平臺的Exc
java socket 連線資料傳輸判斷是否結束
Java當中的Socket類,其實是使用TCP協議進行傳輸的.TCP是可靠的一種傳輸協議. 如果想用TCP協議,並且,服務端和客戶端,在沒有資訊進行傳輸的時候,也不斷開連線,一般情況下,客戶端會在Socket超時之前,想服務端傳送一個用於維持連線的資訊包,來維持連線.但是TCP協議,並不是指長連線.我們每
Android攝像頭採集的視訊資料流如何通過Socket實時傳送到目標服務端
分兩塊: 1.取得攝像頭採集的視訊流 2.傳送到伺服器端 protected MediaRecorder mMediaRecorder; private LocalServerSocket mLss = null; private LocalSock
非同步SOCKET程式設計-傳送和接收資料
我本想把傳送和接收分開作為兩部分,但是最後我決定只略微解釋一下 FD_READ ,留下更多的時間來說明更復雜的 FD_WRITE , FD_READ 事件非常容易掌握. 當有資料傳送過來時, WinSock 會以 FD_READ 事件通知你, 對於每一個 FD_READ 事件
httpclient向HTTPS傳送資料建立SSL連線時的異常
異常資訊如下: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.
C++使用socket往http地址傳送資料
//C++ POST方法 主體 int CDataBaseSink::request(char* hostname, char* api,DWORD port, char* parameters) { WSADATA WsaData;
socket伺服器傳送大資料,客戶端迴圈接收
伺服器端程式碼: public void SendTextMsg(string str) { int maxlength = 1000;