• 大小: 3KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: C/C++
  • 标签: UDP  C语言  视频传输  

资源简介

此程序利用C语言编程,采用UDP协议实现了Windows客户端与linux服务器端视频文件的传输,代码亲自编写,保证可用。

资源截图

代码片段和文件信息

/*
 * pub1.c
 *
 *  Created on: 2017年7月2日
 *      Author: Administrator
 */
#ifdef WIN
#include 
#else
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define SOCKET int
#endif

#include 
#include “pub.h“

//#define BUFSIZE 262144 //256K
//#define BUFSIZE 131072 //128K
//#define BUFSIZE 65536 //64K
#define BUFSIZE 32768 //64K
void getfilename(char *filename char *name)
{
int len = strlen(filename);
int i;
for (i=(len-1);i>=0;i--)
{
if ((filename[1] == ‘\\‘ || filename[i] == ‘/‘))
{
break;
}
}
strcpy(name &filename[i+1]);
return ;
}

int init_socket()
{
#ifdef WIN
WORD wVersionRequested;
WSADATA wsaDATA;
int err;
wVersionRequested = MAKEWORD(1 1);
err = WSAStartup(wVersionRequested &wsaData);
if (err != 0)
{
return -1;
}
if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
{
WSACleanup();
return -1;
}
#endif
return 0;
}


SOCKET create_recv_socket(int port)
{
// if (init_socket() == -1)
// {
// printf(“init_socket fun error\n“);
// return 0;
// }
SOCKET st = socket(AF_INET SOCK_DGRAM 0);  //建立TCP socket
if (st == 0)
{
return 0;
}
struct sockaddr_in addr;
memset(&addr 0 sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = htonl(INADDR_ANY);

if (bind(st (struct sockaddr *) &addr sizeof(addr)) == -1)
{
printf(“bind failed %s\n“ strerror(errno));
return 0;
}
return st;
}

SOCKET create_send_socket()
{
if (init_socket() == -1)
{
printf(“init_socket fun error\n“);
return 0;
}
SOCKET st = socket(AF_INET SOCK_DGRAM 0);  //建立TCP socket
if (st == 0)
{
return 0;
}
return st;
}

int send_work(const char *hostname int port char *filename)
{
SOCKET st_send = create_send_socket();
SOCKET st_recv = create_recv_socket(port + 1);
if (st_send == 0)
{
printf(“st_send create error\n“);
return 0;
}
if (st_recv == 0)
{
printf(“st_recv create error\n“);
return 0;
}

FILE *fd = fopen(filename “rb“);
if (fd == NULL)
{
printf(“open %s failed %s\n“ filename strerror(errno));
return 0;
}
char *buf = malloc(BUFSIZE);
memset(buf 0 BUFSIZE);
getfilename(filename buf);

struct sockaddr_in addr;
memset(&addr 0 sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = inet_addr(hostname);
size_t rc = sendto(st_send buf strlen(buf) 0 (struct sockaddr *)&addr sizeof(addr));
if (rc <= 0)
{
printf(“send failed %s\n“ strerror(errno));
}
else
{
struct sockaddr_in client_addr;
#ifdef WIN
int len = 0;
#else
unsigned int len = 0;
#endif

    len = sizeof(client_addr);
memset(&client_addr 0 sizeof(client_addr));

memset(buf 0 BUFSIZE);
if ((rc = recvfrom(st_recv buf BUFSIZE 0
(struct sockaddr *) &client_addr &len)) <= 0)
{

printf(“recv failed %s\n“ strerror(errno));
}
else
{
printf(“%s

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        372  2017-07-02 22:40  pub.h

     文件        797  2017-07-03 13:42  udp.c

     文件        520  2017-07-02 20:49  udprecv.c

     文件       5562  2017-07-03 16:15  pub.c

----------- ---------  ---------- -----  ----

                 7251                    4


评论

共有 条评论