tcp文件传输的问题
服务器:
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 6666
#define IPADDR "127.0.0.1"
#define BACKLOG 20
int main(void)
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,0),&wsadata);
unsigned sock_trans=socket(AF_INET,SOCK_STREAM,0);
if (sock_trans<0)
{
perror("socket");
exit(1);
}
SOCKADDR_IN saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(PORT);
saddr.sin_addr.S_un.S_addr=inet_addr(IPADDR);
int sadlen=sizeof(saddr);
FILE* fp=NULL;
fp=fopen("e://test.txt","wb");
if(fp==NULL)
{
perror("open file:");
exit(4);
}
if (bind(sock_trans,(SOCKADDR*)(&saddr),sadlen)==SOCKET_ERROR)
//printf ("%d\n",vbind);
{
perror("bind:");
exit(2);
}
else printf ("bind port ok!\n");
//int vlisten=50;
if (listen(sock_trans,20)==SOCKET_ERROR)
{
perror("listen");
exit(3);
}
else
printf ("now listenning.....\n");
//printf ("%d",listen(sock_trans,20));
int saddrlen=sizeof(saddr);
unsigned newsock=accept(sock_trans,(SOCKADDR*)&saddr,&saddrlen);
printf ("catch file now....");
char *buf=(char*)malloc(1024);
ZeroMemory(buf,1024);
int relen=0;
//测试程序的酱油语句,无视之。
//recv(newsock,buf,50,0);
// printf ("%s",buf);
// printf ("\nif put this line ,the program is error!");
while(1)
{
relen=recv(newsock,buf,1024,0);
fwrite(buf,1,relen,fp);
//ZeroMemory(buf,50);
if (relen==0)
{
break;
}
}
fclose(fp);
closesocket(newsock);
closesocket(sock_trans);
WSACleanup();
return 0;
}
客户端:
#include <stdio.h>
#include <windows.h>
//#include <winsock2.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char *argv[])
{
FILE *fp;
printf("file name:");
char filename[50]={0};
gets(filename);
fp=fopen(filename,"rb");
if (fp==NULL)
{
perror("\nopen file error:");
exit(1);
}
WSADATA wsadata;
WSAStartup(MAKEWORD(2,0),&wsadata);
unsigned sock_trans=socket(AF_INET,SOCK_STREAM,0);
if (sock_trans==0)
{
printf ("socket build faile!!\n");
exit(1);
}
printf ("target pc's IP address:\n");
//如果正式调试,将服务器端ip写死。
char *ipaddr=NULL;
ipaddr=(char *)malloc(128);
gets(ipaddr);
SOCKADDR_IN sockadd;
sockadd.sin_family=AF_INET;
sockadd.sin_port=htons(6666);
sockadd.sin_addr.S_un.S_addr=inet_addr(ipaddr);
int con_info=connect(sock_trans,(SOCKADDR*)&sockadd,
sizeof(sockadd));
if (con_info==SOCKET_ERROR)
{
printf ("connect fail!\n");
//exit(2);
}
char *buf=(char*)malloc(50);
int freed_return_val=0;
while (feof(fp))
{
freed_return_val=fread(buf,1,50,fp);
send(sock_trans,buf,freed_return_val,0);
}
fclose(fp);
closesocket(sock_trans);
WSACleanup();
return 0;
}
服务器:
#include<windows.h>
#include<stdio.h>
#include<stdlib.h>
#pragma comment(lib,"ws2_32.lib")
#define PORT 6666
#define IPADDR "127.0.0.1"
#define BACKLOG 20
int main(void)
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2,0),&wsadata);
unsigned sock_trans=socket(AF_INET,SOCK_STREAM,0);
if (sock_trans<0)
{
perror("socket");
exit(1);
}
SOCKADDR_IN saddr;
saddr.sin_family=AF_INET;
saddr.sin_port=htons(PORT);
saddr.sin_addr.S_un.S_addr=inet_addr(IPADDR);
int sadlen=sizeof(saddr);
FILE* fp=NULL;
fp=fopen("e://test.txt","wb");
if(fp==NULL)
{
perror("open file:");
exit(4);
}
if (bind(sock_trans,(SOCKADDR*)(&saddr),sadlen)==SOCKET_ERROR)
//printf ("%d\n",vbind);
{
perror("bind:");
exit(2);
}
else printf ("bind port ok!\n");
//int vlisten=50;
if (listen(sock_trans,20)==SOCKET_ERROR)
{
perror("listen");
exit(3);
}
else
printf ("now listenning.....\n");
//printf ("%d",listen(sock_trans,20));
int saddrlen=sizeof(saddr);
unsigned newsock=accept(sock_trans,(SOCKADDR*)&saddr,&saddrlen);
printf ("catch file now....");
char *buf=(char*)malloc(1024);
ZeroMemory(buf,1024);
int relen=0;
//测试程序的酱油语句,无视之。
//recv(newsock,buf,50,0);
// printf ("%s",buf);
// printf ("\nif put this line ,the program is error!");
while(1)
{
relen=recv(newsock,buf,1024,0);
fwrite(buf,1,relen,fp);
//ZeroMemory(buf,50);
if (relen==0)
{
break;
}
}
fclose(fp);
closesocket(newsock);
closesocket(sock_trans);
WSACleanup();
return 0;
}
客户端:
#include <stdio.h>
#include <windows.h>
//#include <winsock2.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char *argv[])
{
FILE *fp;
printf("file name:");
char filename[50]={0};
gets(filename);
fp=fopen(filename,"rb");
if (fp==NULL)
{
perror("\nopen file error:");
exit(1);
}
WSADATA wsadata;
WSAStartup(MAKEWORD(2,0),&wsadata);
unsigned sock_trans=socket(AF_INET,SOCK_STREAM,0);
if (sock_trans==0)
{
printf ("socket build faile!!\n");
exit(1);
}
printf ("target pc's IP address:\n");
//如果正式调试,将服务器端ip写死。
char *ipaddr=NULL;
ipaddr=(char *)malloc(128);
gets(ipaddr);
SOCKADDR_IN sockadd;
sockadd.sin_family=AF_INET;
sockadd.sin_port=htons(6666);
sockadd.sin_addr.S_un.S_addr=inet_addr(ipaddr);
int con_info=connect(sock_trans,(SOCKADDR*)&sockadd,
sizeof(sockadd));
if (con_info==SOCKET_ERROR)
{
printf ("connect fail!\n");
//exit(2);
}
char *buf=(char*)malloc(50);
int freed_return_val=0;
while (feof(fp))
{
freed_return_val=fread(buf,1,50,fp);
send(sock_trans,buf,freed_return_val,0);
}
fclose(fp);
closesocket(sock_trans);
WSACleanup();
return 0;
}