求两个传送文件的程序怎么做。或者源码

zjs2010 2010-06-28 10:00:22
谁能给个思路,或者是源码。
两个程序。A和B。A程序发送一个文件名(例如1。txt)给B。B程序读取1。txt并将内容返还给A.A收到后将1.txt.另存为2。txt
因为急需所以最好C源码,饿。。拜托啊。
...全文
190 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobo364 2010-06-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zjs2010 的回复:]
2楼谢谢啊。不过有CSockets的源码么?
[/Quote]

csockets是微软的东西,没有源代码,要的只能看开源的东西了
honemay 2010-06-28
  • 打赏
  • 举报
回复
接收方为socket服务器,发送方为socket客户端
首先读取1.txt文件的内容,你可以指定读取多少字节,比如1K数据,然后用客户端send过去,服务器端就recv数据,接受到后写入文件
如此循环,直到读完1.txt的文件内容!
  • 打赏
  • 举报
回复
我空间里面有个最简单的例子,虽然灰常不完美,但是呢,是基本思路写出来的。。。我汗。。
zjs2010 2010-06-28
  • 打赏
  • 举报
回复
谢谢了。但还是想要源码。。。。
wanglu1990 2010-06-28
  • 打赏
  • 举报
回复
帮群主宣传一下qq群.
资深C/C++ qq群:30268419 主要研究算法,数据结构,嵌入式
验证:请说明是在csdn看到的.
cattycat 2010-06-28
  • 打赏
  • 举报
回复
tcp的socket很简单的,传输文件。就是send,recv用法。先找找tcp socket的简单例子,然后发送文件数据即可。
liutengfeigo 2010-06-28
  • 打赏
  • 举报
回复
接分升星星
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zhoutanliang 的回复:]

引用 6 楼 zjs2010 的回复:

2楼谢谢啊。不过有CSockets的源码么?


CSockets你可以选用任何已经实现好的

WIN32下的

或者

ACE
[/Quote]

总不能为了传文件

你想从TCP做起吧

实现好的Socket有很多

根据你的环境需求选择相应的Socket实现比较务实
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zjs2010 的回复:]

2楼谢谢啊。不过有CSockets的源码么?
[/Quote]

CSockets你可以选用任何已经实现好的

WIN32下的

或者

ACE
zjs2010 2010-06-28
  • 打赏
  • 举报
回复
2楼谢谢啊。不过有CSockets的源码么?
赵4老师 2010-06-28
  • 打赏
  • 举报
回复
不用传来传去那么麻烦了。
用映射网络驱动器
在A程序所在机器上(假设B所在机器的IP地址为192.168.1.123)
system("net use z: \\192.168.1.123\shared_dir password");
f=fopen("z:1.txt","r");
//...
fclose(f);
system("net use z: /delete");
zjs2010 2010-06-28
  • 打赏
  • 举报
回复
刚学好多不懂。。还得学啊
zjs2010 2010-06-28
  • 打赏
  • 举报
回复
能有源程序么?xiexie
  • 打赏
  • 举报
回复
文件发送有封装好的库

也可以参考
http://www.vckbase.com/document/viewdoc/?id=321
challenge99 2010-06-28
  • 打赏
  • 举报
回复
做个简单协议
A - > B 字节数(文件名长度) + 文件名
B - > A 字节数(文件长度)
B -> A 文件数据
A 收齐后关闭连接

然后就是 socket(AF_INET, SOCK_STREAM, 0) 和 open 的事了
xiaozhiwei 2010-06-28
  • 打赏
  • 举报
回复
先运行B程序,然后运行A程序
xiaozhiwei 2010-06-28
  • 打赏
  • 举报
回复
A程序

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

#define MAX_FILE_NAME_LEN 100
#define FILE_NAME "1.txt"

int main()
{
WSADATA wsaData;
SOCKET sock;
int recvLen;
char szFileName[MAX_FILE_NAME_LEN + 1];
FILE *file;
char buf[512];

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("WSAStratup Failure!\n");
return 1;
}

sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
printf("Create Socket Failure!\n");
WSACleanup();
return 1;
}

sockaddr_in addr;
addr.sin_port = htons(8888);
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if (connect(sock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
{
printf("Connect Failure!\n");
WSACleanup();
return 1;
}

strcpy(szFileName, FILE_NAME);
szFileName[0] = '2';
file = fopen(szFileName, "w+");
if (file == NULL)
{
printf("Open File [%s] Failure!\n", szFileName);
WSACleanup();
return 1;
}

if (send(sock, FILE_NAME, strlen(FILE_NAME), 0) == SOCKET_ERROR)
{
printf("Send Failure!\n");

int k = WSAGetLastError();
WSACleanup();
return 1;
}

while (1)
{
recvLen = recv(sock, buf, 512, 0);
if (recvLen == 0 || recvLen == SOCKET_ERROR)
{
break;
}

fwrite(buf, 1, recvLen, file);
}

fclose(file);

printf("接收文件[%s]完成!\n", szFileName);
WSACleanup();

system("pause");
return 0;
}
xiaozhiwei 2010-06-28
  • 打赏
  • 举报
回复
B程序

#include <stdio.h>
#include <stdlib.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

#define MAX_FILE_NAME_LEN 100

int main()
{
WSADATA wsaData;
SOCKET sock;
char szFileName[MAX_FILE_NAME_LEN + 1];
int recvLen;
FILE *file;
char buf[512];
int len;

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
printf("WSAStratup Failure!\n");
return 1;
}

sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock == INVALID_SOCKET)
{
printf("Create Socket Failure!\n");
goto EXIT;
}

sockaddr_in addr;
addr.sin_port = htons(8888);
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

if (bind(sock, (sockaddr*)&addr, sizeof(addr)) == SOCKET_ERROR)
{
printf("Bind Failure!\n");
goto EXIT;
}

printf("绑定端口[8888]成功!\n");

if (listen(sock, 1) == SOCKET_ERROR)
{
printf("Listen Failure!\n");
goto EXIT;
}

printf("开始监听...\n");

SOCKET clientsock;
sockaddr_in clientaddr;
len = sizeof(sockaddr_in);

clientsock = accept(sock, (sockaddr*)&clientaddr, &len);
if (clientsock == INVALID_SOCKET)
{
printf("Accept Failure!\n");
goto EXIT;
}

memset(szFileName, 0, sizeof(szFileName));
recvLen = recv(clientsock, szFileName, MAX_FILE_NAME_LEN, 0);
if (recvLen == 0)
{
printf("Connection Closed!\n");
goto EXIT;
}
else if (recvLen == SOCKET_ERROR)
{
printf("Recv Failure!\n");
goto EXIT;
}

file = fopen(szFileName, "r");
if (file == NULL)
{
printf("Open File [%s] Failure!\n", szFileName);
goto EXIT;
}

while (!feof(file))
{
int readLen;

readLen = fread(buf, 1, 512, file);
if (ferror(file))
{
printf("Read File Failure!\n");
goto EXIT;
}

if (send(clientsock, buf, readLen, 0) == SOCKET_ERROR)
{
printf("Send Failure!\n");
goto EXIT;
}
}

fclose(file);

printf("发送文件[%s]完成!\n", szFileName);

EXIT:
WSACleanup();
system("pause");
return 0;
}

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧