|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
:oops: 使用TCP/UDP協議編寫一個客戶端程序,發送的指令格式為:
BS TYPE CRC
說明:
[b]BSC[/b] [i](1byte)[/i] [u]0x08[/u] [color=red](十六進制碼) [/color]
[b]TYPE[/b] [i](1byte)[/i] [u]0x00 [/u]
[b]CRC[/b] [i](2byte)[/i] [u]0xB0 0xC7 [/u]
請問發送這樣的指令代碼程序該如何按字節發送和接收呢?
我只懂得按字符串發送,按字節該如何寫?
請各位高手不惜賜教! 小弟感激不盡
小弟真的很急需得到賜教,還請大家多多伸手相助!!!
:) |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
按字符串和按字節發送不都一樣嗎,
char s1[10] = "abcdefghi";
char s2[10] = {1,2,3,4,5,6,7,8,9,10};
然後sendto(s1,10...); sendto(s2,10,...);
不知我說清楚了沒有? |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
如何轉化十六進制按字節發送??能否解釋一下?
字節發送和字符串發送有什麼不同? |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
簡單說說,例如
int I = 1;
char str[4];
在FreeBSD, 8x86下,int占4個字節,I 在內存中這樣表示
低端內存 0x00 <---- 第1字節
0x00 <---- 2字節
0x00 <---- 3字節
高端內存 0x01 <---- 4字節
把一個 int 轉化十六進制按字節發送給對方,你只要你這4個字節發送過去就可以了。
sprintf(str, "%d", I);
write(socket, str, 4);
必要的話,還要考慮雙方 大端字節序 、小端字節序 的問題。 |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
UDP通信是可以發送非可見字符信息的
如果發送的消息中包含CRC校驗的話,是不能轉換成可見字符的
可以這樣做:
char buf[4];
buf[0]=0x08;
buf[1]=0x00;
buf[2]=0xb0
buf[3]=0xc7
用sendto發送時指定發送長度為4即可。
sendto(sockid,buf,4,0,......) |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
如果是結構的話
一般會默認按4/8個字節對齊
如果想按一個字節對齊的話
那麼應該改變編譯器選項
如果是在UNIX下
那麼置頂的FAQ中有對編譯器對齊選項討論
結構的保存是一個連續的地址,這個連接地址可以看成是一個字符串流(當然沒有以\0結束)
使用socket函數可以直接發送(send recv等都有要發送的字節數) |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
可以用
int i=1234;
char buf[5];
memcpy((char *)buf,(char *)&i,sizeof(i));
sendto(sockid,buf,4,...);
應該可以的 |
在TCP/UDP SOCKET程序中如何按字節發送和接收??《斑竹請進》
:lol:
謝謝大家的指點,我自己再去試一試。 |
| |