资源简介
此程序利用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
相关资源
- 基于51单片机的c语言编写的计算器程
- 简单时间获取,用c语言编写,客户端
- windows下UDP组播多播发送和接收程序
- C语言课程设计 - 学生宿舍管理系统
- C语言大作业 西北工业大学
- 基于c++的udp传输,传送超过10M的文件
- 3DES,C语言版,ECB,PKCS7
- 利用LINUX FIFO命名管道技术实现双向聊
- C语言学生宿舍管理程序源代码
- kcf目标跟踪C代码
- 围棋C语言代码要满十字
- 逆波兰表达式 c语言实现
- 指法练习 C语言源代码
- 人工智能 八数码问题 A*算法 C语言
- 全国交通咨询模拟c语言版214055
- 基于C语言STC89C52单片机电子密码锁的
- C语言实现 简单的端口扫描
- C语言课程设计——超市商品库存管理
- RSA算法1024位C语言实现
- 一个基于单片机的温湿度程序
- 由c语言文件制作成mex文件的方法
- C语言连接mysql,实现通讯录功能
- 数据结构C语言版综合实践集合运算
- 简易工资管理系统C语言实现
- c语言课程设计报告 计算器的实现内
- GSM发短信 GPS 单片机C语言实现
- PIC18F452串口通信程序
- 学生信息管理系统c语言单链表实现
- graphics的随笔画程序基于c语言
- 双边滤波器 C语言程序可用
评论
共有 条评论