为了配合LM3S8962+VS1053的调试,从网上下载并修改了一个发送文件的程序,用来完成:
1. 网络下载存储播放;
2. 网络实时播放
为进一步实现网络收音机的功能打下结实的基础。
代码功能简单,如下所示:
#include<winsock2.h>
#include<stdio.h>
#include <sys/stat.h>
char aa[100000]={0};
void main()
{
FILE *file1;
struct stat statBuf;
unsigned long file_size,num;
WORD wVersionRequested;
WSADATA wsaData;
SOCKET sockSrv,sockConn;
SOCKADDR_IN addSrv;
SOCKADDR_IN addClient;
int err,len,i,j,k;
char recvBuf[100];
unsigned char sendBuf[512];// = {'1','2','3','0'};
unsigned char *p = sendBuf;
char *pp="wait for request!";
file1=fopen("C://Windows.wav","rb");
fstat(fileno(file1),&statBuf);
file_size = statBuf.st_size;
printf("%ld",file_size);
wVersionRequested = MAKEWORD( 2, 2 );
//加载套接字DLL库
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 )
{
WSACleanup( );
return;
}
//1、创建套接字
sockSrv=socket(AF_INET,SOCK_STREAM,0);
/*第一个参数对于TCP/IP协议的套接字,只能是AF_INET或PF_INET,第二个参数对于
1.1版本的socket,只支持两种类型的套接字,SOCK_STREAM指定产生流式套接字,
SOCK_DGRAM产生数据报套接字,第三个参数为零时自动选择合适的协议。*/
//2、绑定套接字到一个本地地址和端口上
//htonl是把u_long类型转换为网络字节序
//htons是把u_short类型转换为网络字节序
addSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); //inet_addr("192.168.1.11");
addSrv.sin_family=AF_INET;
//unsigned?? short?? sin_port;
addSrv.sin_port=htons(4000);
bind(sockSrv,(SOCKADDR*)&addSrv,sizeof(SOCKADDR));
//3、将套接字设为监听模式,准备接受客户请求
listen(sockSrv,5);
len=sizeof(SOCKADDR);
sockConn=accept(sockSrv,(SOCKADDR*)&addClient,&len);
//accept函数第三个参数必须赋初始值,初始值为结构体的长度。否则函数调用失败
num = 0;
//4、用返回的套接字和客户端进行通信
while(1)
{
k = fread(sendBuf,1,128,file1);
if(k==-1)
{
fclose(file1);printf("read error!\n"); break;
}
num = num + k;
send(sockConn,sendBuf,128,0); //发送一个网络数据包
if(num > file_size - 128)
{
printf("data over!");
while(1)
{
}
}
printf("wait another packet!");
k = recv(sockConn,recvBuf,100,0); //等待回馈
}
closesocket(sockConn);
fclose(file1);
}
代码下载:
引用: 原帖由 chenzhufly 于 2011-10-14 10:23 发表 不是一个人在战斗 是我师弟很给力 哈哈 我文档发都来不及 基本上是一步一步 点点滴滴了
厉害,顶顶。
太厉害了, 支持一个