當前位置:首頁 » 編程軟體 » 數據傳輸編程

數據傳輸編程

發布時間: 2022-05-04 09:07:05

① 課設:區域網中數據傳輸的實現

//編譯時要將Ws2_32.lib添加到項目中

#include<stdio.h>

#include<stdlib.h>

#include<memory.h>

#include<Winsock2.h>

//使用方式:

intmain(intargc,char**argv)

{

if((argc==2&&strcmp(argv[1],"/?")==0)||argc<2||argc>4)

{

printf("輸入:'%s/server/埠號'來啟動服務端. ",argv[0]);

printf("輸入:'%s/client/服務端IP地址/埠號'來啟動客戶端. ",argv[0]);

printf("聊天過程中輸入'exit!'退出. ");

return1;

}

WSADATAwsaData;

SOCKETsk=0;

SOCKETsk_SR_Data=0;

//初始化winsock

intiResult=WSAStartup(MAKEWORD(2,2),&wsaData);

if(iResult!=NO_ERROR){

printf("WSAStartupfailed:%d ",iResult);

return1;

}

//啟動服務端

if(argc==3&&strcmp(argv[1],"/server")==0)

{

sk=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(INVALID_SOCKET==sk)

{

printf("創建套介面失敗!");

return1;

}

sockaddr_inservice;

service.sin_family=AF_INET;

service.sin_addr.s_addr=htonl(INADDR_ANY);

service.sin_port=htons(atoi(argv[2]+1));

if(bind(sk,(SOCKADDR*)&service,sizeof(service))==SOCKET_ERROR)

{

printf("綁定套介面失敗! ");

closesocket(sk);

return1;

}

if(listen(sk,SOMAXCONN)==SOCKET_ERROR)

{

printf("監聽埠失敗! ");

closesocket(sk);

return1;

}

printf("服務已啟動,正等待連接...");

sk_SR_Data=accept(sk,NULL,NULL);

if(sk_SR_Data==INVALID_SOCKET)

{

printf("接受連接失敗! ");

closesocket(sk);

return1;

}

printf(" ");

//接受了連接後,等待客戶端發送過來的數據

charRecvBuf[1024];

charSendBuf[1024];

intRecvResult=0;

memset(RecvBuf,0x0,1024);

printf("正等待數據...");

RecvResult=recv(sk_SR_Data,RecvBuf,1024-1,0);//接收數據

printf(" ");

if(SOCKET_ERROR==RecvResult)

{

printf("接收數據失敗![%d] ",::WSAGetLastError());

closesocket(sk);

closesocket(sk_SR_Data);

return1;

}

while(RecvResult>0)//數據接收成功時

{

printf("Recv:%s ",RecvBuf);

memset(SendBuf,0x0,1024);

printf("Send=");

scanf("%s",SendBuf);//輸入要發送的內容

if(strcmp(SendBuf,"exit!")==0)//如果是退出指令,則退出

{

break;

}

if(SOCKET_ERROR==send(sk_SR_Data,SendBuf,1024-1,0))//執行發送

{

printf("發送數據失敗![%d] ",::WSAGetLastError());

closesocket(sk);

closesocket(sk_SR_Data);

return1;

}

//發送後接收對方的回答

memset(RecvBuf,0x0,1024);

printf("正等待數據...");

RecvResult=recv(sk_SR_Data,RecvBuf,1024-1,0);

printf(" ");

if(SOCKET_ERROR==RecvResult)

{

printf("接收數據失敗![%d] ",::WSAGetLastError());

closesocket(sk);

closesocket(sk_SR_Data);

return1;

}

}

closesocket(sk);

closesocket(sk_SR_Data);

}

else//啟動客戶端

{

sk_SR_Data=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);

if(INVALID_SOCKET==sk_SR_Data)

{

printf("創建套介面失敗!");

return1;

}

sockaddr_inclientService;

clientService.sin_family=AF_INET;

clientService.sin_addr.s_addr=inet_addr(argv[2]+1);

clientService.sin_port=htons(atoi(argv[3]+1));

if(connect(sk_SR_Data,(SOCKADDR*)&clientService,sizeof(clientService))==SOCKET_ERROR)

{

printf("連接到服務端失敗![%d] ",::WSAGetLastError());

closesocket(sk_SR_Data);

return1;

}

//連接後發送一個已連接的消息

charRecvBuf[1024];

charSendBuf[1024];

intRecvResult=0;

memset(SendBuf,0x0,1024);

strcpy(SendBuf,"一個客戶端已連接,可以通話了! ");

if(SOCKET_ERROR==send(sk_SR_Data,SendBuf,1024-1,0))

{

printf("發送數據失敗![%d] ",::WSAGetLastError());

closesocket(sk_SR_Data);

return1;

}

//發送連接消息後接收對方的回復

memset(RecvBuf,0x0,1024);

printf("正等待數據...");

RecvResult=recv(sk_SR_Data,RecvBuf,1024-1,0);

printf(" ");

if(SOCKET_ERROR==RecvResult)

{

printf("接收數據失敗![%d] ",::WSAGetLastError());

closesocket(sk_SR_Data);

return1;

}

while(RecvResult>0)//當接收到數據時循環操作

{

printf("Recv:%s ",RecvBuf);

memset(SendBuf,0x0,1024);

printf("Send=");

scanf("%s",SendBuf);

if(strcmp(SendBuf,"exit!")==0)//如果是退出指令,則退出

{

break;

}

if(SOCKET_ERROR==send(sk_SR_Data,SendBuf,1024-1,0))//發送

{

printf("發送數據失敗![%d] ",::WSAGetLastError());

return1;

}

memset(RecvBuf,0x0,1024);

printf("正等待數據...");

RecvResult=recv(sk_SR_Data,RecvBuf,1024-1,0);//接收

printf(" ");

if(SOCKET_ERROR==RecvResult)

{

printf("接收數據失敗![%d] ",::WSAGetLastError());

closesocket(sk_SR_Data);

return1;

}

}

closesocket(sk_SR_Data);

}

WSACleanup();

return0;

}

② USB設備已裝驅動,且知道其VID,PID,VC該怎麼編程實現數據傳送

看看具體是什麼USB類的設備,通過MDK,DDK或SDK中的設備管理器族函數枚舉設備的VID和PID,尋找到vid和pid就可以通過相關函數得到這個設備的符號名,然後通過相關函數比如openfile得到設備文件的讀寫句柄來通過驅動定義的函數或readfile和writefie來讀寫數據
你的採納是我前進的動力!
記得好評和採納,答題不易,互相幫助,
手機提問的朋友在客戶端右上角評價點滿意即可.
如果你認可我的回答,請及時點擊採納為滿意回答按鈕

③ 數據在電腦內是如何進行傳輸的

根據抽象層次來梳理下大致的概念:傳輸信號是數字信號,高低電平表示,可以比模擬信號更加准確的傳輸信息。數字信號的處理的底層是通過最最基本的邏輯門電路來完成的,基於物理定律。如果你不了解邏輯門,你可以先去研究下三極體/晶體管,在集電極輸入信號三極體可以導通,所以可以看做是一個電信號觸發的開關。接著,一堆開關排列可以構成邏輯門,用來輸出想要的邏輯。許許多多的邏輯門可以構成觸發器、鎖存器、比較器、加法器、乘法器、比較器等各種奇怪的模塊。(如果想知道怎麼構成的原理請回復,有人想了解或者我閑著沒事乾的話會更新)當你想實現一種功能,因此把以上一些奇怪的模塊組合在一起(一些簡單的模塊集成在一塊ic上)時,你需要幾個引腳/信號來輸入你要這個部件執行哪一種命令;你還需要幾個引腳/信號來輸入要計算/處理的數據。這時,你做成了內存陣列、選擇器、運算器、累加器等等更加實用的部件。(同樣,如果想知道怎麼構成的原理請回復,有人想了解或者我閑著沒事乾的話會更新)你做好了上述的部件以後,你想實現更復雜的功能,希望可以編程來控制電路計算,所以你想設計一個既可以存儲你要它執行的指令,又可以計算數據,最好還可以把數據輸出(顯示)給大家看的ic,你陷入了為難:這么多模塊,怎麼才能讓不同的部件進行協同運作呢。經過苦苦的研究/踩著前人的肩膀,你發現了可以搞一種叫匯流排的東西在模塊間通信以達到目的。首先,你要傳輸數據,你需要數據匯流排;其次,你的指令要從存儲器取出執行,你需要指令/控制匯流排,來告訴各部件按照什麼命令執行;最後需要的是地址匯流排,來通信執行第幾條指令,修改哪個位元組的內存。設計完成了,你用了5000個晶體管做成了一台電腦,可是好慢哦,又時居然還會出錯!你苦心研究,又運用了糾錯演算法,校驗一類的程序,降低了出錯的概率,你優化了電路,使用了流水線,又把500000(這時優化了各種地方,門越來越多)個晶體管刻在晶圓上,封裝好做成了ic,再進行實驗,燒錄程序,成功執行,速度提升20倍,誤碼0.000000001%以內,成功運行自己寫的系統。

④ 51單片機數據傳輸編程問題。

設一個值為30H的變數,以及一個指示地址的變數,然後用movx讀取外存儲器到A,然後把A的內容mov到RAM,然後clr
A,再把A的內容MOVX到剛剛的外存儲器地址,每這么做一次,就將那個30H的變數減一,並將地址變數加一,一直到那個30H變數減為零.

c語言socket編程實現網路數據傳輸

僅供參考

// serverTCP.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
using namespace std;
long long cnt = 0;
void transFile(SOCKET s)
{
printf("新子服務%d......",cnt);
send(s,"welcome to TCP FILE SERVER !",strlen("welcome to TCP FILE SERVER !")+1,0);

char Buf[BUFSIZE];

FILE *fp;
//printf("客戶端已打開\n請輸入存放文件地址:\n");
char FilePath[128]={"0"};
ltoa(cnt,FilePath,10);

if((fp=fopen(FilePath,"wb"))==NULL)
{
printf("文件未打開\n");
return;
}
else
{
send(s,"開始傳送",strlen("開始傳送")+1,0);
//得到文件大小
char Size[20];
long int FileSize=0;
recv(s,Size,21,0);
FileSize=atol(Size);
printf("得到文件大小: %d\n",FileSize);
//開始傳送

char Block[BUFSIZE];
long int x=0;
while (1)
{
x += BUFSIZE;
if(x < FileSize)
{
recv(s,Block,BUFSIZE+1,0);
fwrite(Block,1,BUFSIZE,fp);
}
else
{
recv(s,Block,FileSize+BUFSIZE-x+1,0);
printf("文件接收完畢\n");
fwrite(Block,1,FileSize+BUFSIZE-x,fp);
fclose(fp);
break;
}
}
}
fclose(fp);
closesocket(s);

}
int _tmain(int argc, _TCHAR* argv[])
{

WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err = WSAStartup(myVersionRequest,&wsaData);
if (!err)
{
printf("伺服器啟動......\n");
}
else
{
printf("伺服器啟動失敗!");
exit(0);
}
SOCKET serSocket = socket(AF_INET,SOCK_STREAM,0);//創建了可識別套接字
SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
addr.sin_port=htons(PORTBASE);//綁定埠
bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//綁定完成
listen(serSocket,ACESIZE);//其中第二個參數代表能夠接收的最多的連接數

SOCKADDR_IN clientAddr;
int len = sizeof(SOCKADDR);
while(1)
{
cnt++;
SOCKET serConn;
serConn = accept(serSocket,(SOCKADDR*)&clientAddr,&len);//如果這里不是accept而是conection的話。。就會不斷的監聽
if(_beginthread((void (*)(void *))transFile, ACESIZE,(void *)serConn) < 0) return 0;
}

return 0;
}

// clientTCP.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
WORD myVersionRequest;
WSADATA wsaData;
myVersionRequest=MAKEWORD(1,1);
int err;
err=WSAStartup(myVersionRequest,&wsaData);
if (!err)
{
printf("已打開套接字\n");
}
else
{
//進一步綁定套接字
printf("套接字未打開!");
return 0;
}
SOCKET cliSocket =socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addr;
char ip_addr[16]={"127.0.0.1"};
addr.sin_addr.S_un.S_addr=inet_addr(ip_addr);
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);

char ACK[64];
connect(cliSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//開始連接

recv(cliSocket,ACK,sizeof(ACK),0);
printf("%s\n",ACK);
FILE *fp;
int FileSize=0;

char Block[BUFSIZE]={"0"};
char FilePath[128]={"0"};
int i=0;
do
{
printf("請輸入文件地址:\n");
gets(FilePath);
i = 0;
if((fp=fopen(FilePath,"rb"))==NULL)
{
i = 1;
printf("文件打開失敗\n");
}
}while(i);
fseek(fp,0L,SEEK_END);
FileSize=ftell(fp);
printf("待傳送文件大小: %d\n",FileSize);
printf("等待伺服器接受......\n");

recv(cliSocket,Block,sizeof(Block),0);
printf("%s\n",Block);
if(strcmp(Block,"開始傳送")==0)
{
char Size[20];
ltoa(FileSize,Size,10);
send(cliSocket,Size,sizeof(Size),0);
fseek(fp,0L,SEEK_SET);

long int y=0;
char trans[BUFSIZE];
while(!feof(fp))
{
fread(trans,1,BUFSIZE,fp);
y=y+BUFSIZE;
if(y<FileSize)
{
send(cliSocket,trans,BUFSIZE+1,0);
}
else
{
send(cliSocket,trans,FileSize+BUFSIZE-y+1,0);
closesocket(cliSocket);
WSACleanup();
}
}
}
printf("文件發送完畢\n");
fclose(fp);
closesocket(cliSocket);
WSACleanup();
system("pause");
return 0;
}

⑥ 如何用C編寫數據傳送和接受

去搜一下ftp現成的程序
想自己做的話可以看下socket編程相關

linux網路編程結構體數據傳輸問題

你這個就是完全錯誤的,data->c裡面的內容只在原來的那一端才有.
給你些專業的建議,首先,定義的時候可以不寫char *c,
寫成char c[0],這樣就可以實現不定長的數據
typedef struct node
{
short a;
int b;
char c[0];
}Node;

union real_node {
char buf[100];
Node data;
}

這個基本就可以了,如果realnode很大還有別的方法.
一樓的也沒有解決實際問題,不行的.
關鍵是sizeof (*data) 不會受到data中的字元串影響,所以你實際上從來沒有發出字元串.我的只是一個例子,裡面假設你的c裡麵包含幾十個字元,具體的還需要你自己改.

⑧ 如何用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();
}

⑨ 兩種不同的編程語言之間如果傳遞數據

最簡單的方式就是通過對磁碟文件進行讀寫
比方說你 Python 將數據寫入到 data.txt
然後 QT 讀取 data.txt 的內容,以完成數據交換

還有,可以通過平台相關的 API 來交換數據
Windows 上進程間交換數據的方法就是 Socket、郵槽、管道等機制
前提是你的語言支持調用 Windows 的 API

還有,可以通過 dll 來實現,因為 dll 是用 C/C++ 寫的
可以在裡面寫一些交換數據的函數
然後通過 Python 和 QT 調用這些 dll 函數來交換數據

感覺第一個方法最實用,最簡單

⑩ 求兩個c語言程序間數據傳輸方法

有點像socket編程 看看相關方面的書籍

也可以用本機的網卡跟埠實現

熱點內容
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:270
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:970
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:867
betweenand的用法sql 發布:2025-05-14 18:39:25 瀏覽:249
tplink攝像頭存儲卡格式化 發布:2025-05-14 18:37:08 瀏覽:346
安卓平板怎麼安裝excel的軟體 發布:2025-05-14 18:35:44 瀏覽:41
廣州數控圓弧編程實例 發布:2025-05-14 18:25:00 瀏覽:400
搭建伺服器能使用nodejs開發嗎 發布:2025-05-14 18:24:14 瀏覽:135
alook瀏覽器安卓哪個版本上網最快 發布:2025-05-14 18:22:33 瀏覽:457