這屬于服務(wù)器客戶端模式的網(wǎng)絡(luò)數(shù)據(jù)包對話
創(chuàng)新互聯(lián)成立于2013年,我們提供高端網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、網(wǎng)站設(shè)計、網(wǎng)站定制、成都全網(wǎng)營銷推廣、成都小程序開發(fā)、微信公眾號開發(fā)、seo優(yōu)化排名服務(wù),提供專業(yè)營銷思路、內(nèi)容策劃、視覺設(shè)計、程序開發(fā)來完成項目落地,為成都地磅秤企業(yè)提供源源不斷的流量和訂單咨詢。
你在現(xiàn)假設(shè)你是客戶端,那么你需要改服務(wù)器端程序 的send函數(shù)里面數(shù)據(jù)固定為10111213
語法上看:
P2=0xC0;//p2 與等于 0xc0,相當(dāng) P2 = P20XC0,
sendbyte(data1);//把data1變量作為參數(shù)傳給函數(shù)sendbyte,看函數(shù)名,似乎是要發(fā)送數(shù)據(jù)的樣子
P2|=0x01;//這句 相當(dāng)于 P2 = P2|0X01,作用是將P2的最低位值1
簡述
向一個已連接的套接口發(fā)送數(shù)據(jù)。
#include winsock.h
int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);
s:一個用于標(biāo)識已連接套接口的描述字。
buf:包含待發(fā)送數(shù)據(jù)的緩沖區(qū)。
len:緩沖區(qū)中數(shù)據(jù)的長度。
flags:調(diào)用執(zhí)行方式。
注釋
send()適用于已連接的數(shù)據(jù)包或流式套接口發(fā)送數(shù)據(jù)。對于數(shù)據(jù)報類套接口,必需注意發(fā)送數(shù)據(jù)長度不應(yīng)超過通訊子網(wǎng)的IP包最大長度。IP包最大長度在WSAStartup()調(diào)用返回的WSAData的iMaxUdpDg元素中。如果數(shù)據(jù)太長無法自動通過下層協(xié)議,則返回WSAEMSGSIZE錯誤,數(shù)據(jù)不會被發(fā)送。
請注意成功地完成send()調(diào)用并不意味著數(shù)據(jù)傳送到達(dá)。
如果傳送系統(tǒng)的緩沖區(qū)空間不夠保存需傳送的數(shù)據(jù),除非套接口處于非阻塞I/O方式,否則send()將阻塞。對于非阻塞SOCK_STREAM類型的套接口,實際寫的數(shù)據(jù)數(shù)目可能在1到所需大小之間,其值取決于本地和遠(yuǎn)端主機的緩沖區(qū)大小??捎胹elect()調(diào)用來確定何時能夠進(jìn)一步發(fā)送數(shù)據(jù)。
在相關(guān)套接口的選項之上,還可通過標(biāo)志位flag來影響函數(shù)的執(zhí)行方式。也就是說,本函數(shù)的語義既取決于套接口的選項也取決于標(biāo)志位。后者由以下一些值組成:
值意義
MSG_DONTROUTE 指明數(shù)據(jù)不選徑。一個WINDOWS套接口供應(yīng)商可以忽略此標(biāo)志;MSG_OOB 發(fā)送帶外數(shù)據(jù)(僅適用于SO_STREAM;)。
返回值
若無錯誤發(fā)生,send()返回所發(fā)送數(shù)據(jù)的總數(shù)(請注意這個數(shù)字可能小于len中所規(guī)定的大?。?。否則的話,返回SOCKET_ERROR錯誤,應(yīng)用程序可通過WSAGetLastError()獲取相應(yīng)錯誤代碼。
錯誤代碼:
WSANOTINITIALISED:在使用此API之前應(yīng)首先成功地調(diào)用WSAStartup()。
WSAENETDOWN:WINDOWS套接口實現(xiàn)檢測到網(wǎng)絡(luò)子系統(tǒng)失效。
WSAEACESS:要求地址為廣播地址,但相關(guān)標(biāo)志未能正確設(shè)置。
WSAEINTR:通過一個WSACancelBlockingCall()來取消一個(阻塞的)調(diào)用。
WSAEINPROGRESS:一個阻塞的WINDOWS套接口調(diào)用正在運行中。
WSAEFAULT:buf參數(shù)不在用戶地址空間中的有效位置。
WSAENETRESET:由于WINDOWS套接口實現(xiàn)放棄了連接,故該連接必需被復(fù)位。
WSAENOBUFS:WINDOWS套接口實現(xiàn)報告一個緩沖區(qū)死鎖。
WSAENOTCONN:套接口未被連接。
WSAENOTSOCK:描述字不是一個套接口。
WSAEOPNOTSUPP:已設(shè)置了MSG_OOB,但套接口非SOCK_STREAM類型。
WSAESHUTDOWN:套接口已被關(guān)閉。一個套接口以1或2的how參數(shù)調(diào)用shutdown()關(guān)閉后,無法再用send()函數(shù)。
WSAEWOULDBLOCK:
WSAEMSGSIZE:套接口為SOCK_DGRAM類型,且數(shù)據(jù)報大于WINDOWS套接口實現(xiàn)所支持的最大值。
WSAEINVAL:套接口未用bind()捆綁。
WSAECONNABORTED:由于超時或其他原因引起虛電路的中斷。
WSAECONNRESET:虛電路被遠(yuǎn)端復(fù)位。
參見:
recv(), recvfrom(), socket(), sendto(), WSAStartup()
使用函數(shù)getsockopt獲得發(fā)送緩沖區(qū)的長度。用法如下:
int sockfd;
int val;
int len;
sockfd = socket (AF_INET, SOCK_STREAM, 0);
len = sizeof (val);
getsockopt( sockfd, SOL_SOCKET, SO_SNDBUF, val, len);
printf ("sndbuf len=%d\n", val);
在32位linux系統(tǒng)上發(fā)送緩沖區(qū)為16K ,可以使用setsockopt()修改,會影響網(wǎng)絡(luò)性能
經(jīng)套接字傳送消息
相關(guān)函數(shù)
sendto,sendmsg,recv,recvfrom,recvmsg,socket
表頭文件
#include sys/socket.h
定義函數(shù)
ssize_t send (int s,const void *msg,size_t len,int flags);
參數(shù)說明
第一個參數(shù)指定發(fā)送端套接字描述符;
第二個參數(shù)指明一個存放應(yīng)用程式要發(fā)送數(shù)據(jù)的緩沖區(qū);
第三個參數(shù)指明實際要發(fā)送的數(shù)據(jù)的字符數(shù);
第四個參數(shù)一般置0。
函數(shù)說明
send() 用來將數(shù)據(jù)由指定的 socket 傳給對方主機。使用 send 時套接字必須已經(jīng)連接。send 不包含傳送失敗的提示信息,如果檢測到本地錯誤將返回-1。因此,如果send 成功返回,并不必然表示連接另一端的進(jìn)程接收數(shù)據(jù)。所保證的僅是當(dāng)send 成功返回時,數(shù)據(jù)已經(jīng)無錯誤地發(fā)送到網(wǎng)絡(luò)上。
對于支持為報文設(shè)限的協(xié)議,如果單個報文超過協(xié)議所支持的最大尺寸,send 失敗并將 errno 設(shè)為 EMSGSIZE ;對于字節(jié)流協(xié)議,send 會阻塞直到整個數(shù)據(jù)被傳輸。
flags 參數(shù)有如下的選擇:
MSG_DONTROUTE 勿將數(shù)據(jù)路由出本地網(wǎng)絡(luò)
MSG_DONTWAIT 允許非阻塞操作(等價于使用O_NONBLOCK)
MSG_EOR 如果協(xié)議支持,此為記錄結(jié)束
MSG_OOB 如果協(xié)議支持,發(fā)送帶外數(shù)據(jù)
MSG_NOSIGNAL 禁止向系統(tǒng)發(fā)送異常信息
返回值
成功則返回實際傳送出去的字符數(shù),失敗返回-1,錯誤原因存于errno 中。
錯誤代碼
EBADF 參數(shù) s 非法的 socket 處理代碼。
EFAULT 參數(shù)中有一指針指向無法存取的內(nèi)存空間。
WNOTSOCK 參數(shù) s 為一文件描述詞,非 socket。
EINTR 被信號所中斷。
EAGAIN 此動作會令進(jìn)程阻斷,但參數(shù) s 的 socket 為不可阻斷的。
ENOBUFS 系統(tǒng)的緩沖內(nèi)存不足。
EINVAL 傳給系統(tǒng)調(diào)用的參數(shù)不正確。
WM_SETTEXT Message
--------------------------------------------------------------------------------
An application sends a WM_SETTEXT message to set the text of a window.
Syntax
To send this message, call the SendMessage function as follows.
lResult = SendMessage( // returns LRESULT in lResult
(HWND) hWndControl, // handle to destination control
(UINT) WM_SETTEXT, // message ID
(WPARAM) wParam, // = (WPARAM) () wParam;
(LPARAM) lParam // = (LPARAM) () lParam;
);
Parameters
wParam
This parameter is not used.
lParam
Pointer to a null-terminated string that is the window text.
你需要獲得打開的txt程序的hwnd,還有文本框的句柄,
這一步需要用到FindWindow函數(shù)
這個你可以使用vc里面帶的spy++輔助看一下
然后再調(diào)用SendMessage函數(shù)
具體參數(shù)如上面的鳥語描述,wParam沒用,后面的lParam 就是一個字符串指針