A. c語言發送SYN數據包,有什麼好的速度控制辦法嗎
timegettime()可以控制時間間隔
B. C語言 socket封包和解包
你的基本思路是正確的,就是在發送數據之前把數據的長度添加在數據之前,便於收到後進行解析。
不過你這個在稍微有點異常的情況下就可以引起系統崩潰,因為一旦「長度」部分可能是亂碼,因而引起後面數據的訪問越界。
比較科學的做法就是為payload數據增加包頭(包括前導碼、數據描述)和包尾(包校驗碼),通過一系列的校驗,首先驗證包的數據是正常的,然後再從包中吧數據解析出來。
C. 在linux系統中用c語言編寫一個網路tcp主從通信的socket程序,要求發送數據包
沒有你想像的那麼復雜,其實監聽埠,然後read或者write就夠了。
D. c語言如何實現一個自定義數據包向另一個計算機發送
直接socket發送就可以,一個客戶端一個服務端,布置在兩台計算機或一台上都可以,包的內容可以自定義協議,想怎麼打包都行,下面別人的簡單實現
http://blog.csdn.net/wind19/article/details/6156339
E. C語言如何實現POST數據包
先建立TCP連接,然後發送HTTPpost.
你看看下面的數據包就知道了。
F. 利用C語言編寫模擬ARP發送請求數據包和接收數據包
我給你一個技術思路吧。
如果要用C實現模擬ARP發送數據包和接收數據包,可以使用VC6.0開發win32 console application,然後開發一個windows控制台程序,使用API函數開發。
G. c語言,怎麼把在vs寫好的代碼打包成軟體發給沒有安裝vs的人用(詳細點)·
兩種方法
1: 把用到的vc運行庫和生成的exe文件放在一塊復制過去
2: 用靜態鏈接方法
如圖:
用relese模式編譯,這樣生成的文件沒有調試信息,運行效率也高
這樣設置後,程序所需要的所有東西就都包含在生成的EXE文件里了,不需要其他文件了
H. 如何用c語言把結構體封包
#include <stdio.h>
#include <iostream>
typedef struct student
{
int xuehao;
float fenshu;
}xueshen;
int main()
{
xueshen *buf;
buf = new xueshen;
buf->fenshu = 93;
buf->xuehao = 20;
printf("***********%d",buf->xuehao);
printf("**********%d\n",buf->fenshu);
delete buf;
return 0;
}
I. 如何用C語言實現向某個IP發送數據包(例如4個浮點數)
使用socket編程即可。
1、網路的Socket數據傳輸是一種特殊的I/O,Socket也是一種文件描述符。Socket也具有一個類似於打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨後的連接建立、數據傳輸等操作都是通過該Socket實現的。
2、下面用Socket實現一個windows下的c語言socket通信例子,這里客戶端傳遞一個字元串,伺服器端進行接收。
【伺服器端】
#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret, nLeft, length;
SOCKET sListen, sServer; //偵聽套接字,連接套接字
struct sockaddr_in saServer, saClient; //地址信息
char *ptr;//用於遍歷信息的指針
//WinSock初始化
wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
ret=WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//創建Socket,使用TCP協議
sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sListen == INVALID_SOCKET)
{
WSACleanup();
printf("socket() faild!\n");
return;
}
//構建本地地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路位元組序
saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址
//綁定
ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("bind() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}
//偵聽連接請求
ret = listen(sListen, 5);
if (ret == SOCKET_ERROR)
{
printf("listen() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
return;
}
printf("Waiting for client connecting!\n");
printf("Tips: Ctrl+c to quit!\n");
//阻塞等待接受客戶端連接
while(1)//循環監聽客戶端,永遠不停止,所以,在本項目中,我們沒有心跳包。
{
length = sizeof(saClient);
sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
if (sServer == INVALID_SOCKET)
{
printf("accept() faild! code:%d\n", WSAGetLastError());
closesocket(sListen); //關閉套接字
WSACleanup();
return;
}
char receiveMessage[5000];
nLeft = sizeof(receiveMessage);
ptr = (char *)&receiveMessage;
while(nLeft>0)
{
//接收數據
ret = recv(sServer, ptr, 5000, 0);
if (ret == SOCKET_ERROR)
{
printf("recv() failed!\n");
return;
}
if (ret == 0) //客戶端已經關閉連接
{
printf("Client has closed the connection\n");
break;
}
nLeft -= ret;
ptr += ret;
}
printf("receive message:%s\n", receiveMessage);//列印我們接收到的消息。
}
// closesocket(sListen);
// closesocket(sServer);
// WSACleanup();
}
【客戶端】
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>
#define SERVER_PORT 5208 //偵聽埠
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int ret;
SOCKET sClient; //連接套接字
struct sockaddr_in saServer; //地址信息
char *ptr;
BOOL fSuccess = TRUE;
//WinSock初始化
wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
ret = WSAStartup(wVersionRequested, &wsaData);
if(ret!=0)
{
printf("WSAStartup() failed!\n");
return;
}
//確認WinSock DLL支持版本2.2
if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
printf("Invalid WinSock version!\n");
return;
}
//創建Socket,使用TCP協議
sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sClient == INVALID_SOCKET)
{
WSACleanup();
printf("socket() failed!\n");
return;
}
//構建伺服器地址信息
saServer.sin_family = AF_INET; //地址家族
saServer.sin_port = htons(SERVER_PORT); //注意轉化為網路節序
saServer.sin_addr.S_un.S_addr = inet_addr("192.168.1.127");
//連接伺服器
ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
if (ret == SOCKET_ERROR)
{
printf("connect() failed!\n");
closesocket(sClient); //關閉套接字
WSACleanup();
return;
}
char sendMessage[]="hello this is client message!";
ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed!\n");
}
else
printf("client info has been sent!");
closesocket(sClient); //關閉套接字
WSACleanup();
}