资源简介
此程序利用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
相关资源
- 操作系统c语言模拟文件管理系统844
- C语言开发实战宝典
- C++中头文件与源文件的作用详解
- C语言代码高亮html输出工具
- 猜数字游戏 c语言代码
- C语言课程设计
- 数字电位器C语言程序
- CCS FFT c语言算法
- 使用C语言编写的病房管理系统
- 通信过程中的RS编译码程序(c语言)
- 计算机二级C语言上机填空,改错,编
- 用回溯法解决八皇后问题C语言实现
- 简易教务管理系统c语言开发文档
- 操作系统课设 读写者问题 c语言实现
- 小波变换算法 c语言版
- C流程图生成器,用C语言代码 生成C语
- 3des加密算法C语言实现
- 简单的C语言点对点聊天程序
- 单片机c语言源程序(51定时器 八个按
- 个人日常财务管理系统(C语言)
- c语言电子商务系统
- 小甲鱼C语言课件 源代码
- 将图片转换为C语言数组的程序
- C语言实现的一个内存泄漏检测程序
- DES加密算法C语言实现
- LINUX下命令行界面的C语言细胞游戏
- 用单片机控制蜂鸣器播放旋律程序(
- 学校超市选址问题(数据结构C语言版
- 电子时钟 有C语言程序,PROTEUS仿真图
- 尚观培训linux许巍老师关于c语言的课
评论
共有 条评论