数据传输编程
① 课设:局域网中数据传输的实现
//编译时要将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编程 看看相关方面的书籍
也可以用本机的网卡跟端口实现