⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clientftp.cpp

📁 win网络程序设计中的一个源代码
💻 CPP
字号:
// clientftp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "WinSock.h"
#include "windows.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#pragma comment (lib, "wsock32.lib")

///////////////////////////////////////////////////
#define RECV_PORT 2000
#define SEND_PORT 3000
#define MAX_FILESIZE 32*1024
//////////////////////////////////////////////////

SOCKET sock;
sockaddr_in ServerAddr;


struct Filedata
{
	char ffname [30];
	char ffdata [MAX_FILESIZE];
	int  len;
}DataPacket;

DWORD StartSock()
{
	WSADATA WSAData;
	if (WSAStartup (MAKEWORD (2,2), &WSAData) !=0)
	{
		printf ("sock init fail!\n");
		return (-1);
	}
	ServerAddr.sin_family = AF_INET;
	ServerAddr.sin_addr.s_addr = inet_addr ("192.0.5.235");
	ServerAddr.sin_port = htons (RECV_PORT);
	return (1);
}


DWORD CreateSocket()
{
	sock = socket (AF_INET, SOCK_STREAM, 0);
	if (sock == SOCKET_ERROR)
	{
		printf("sock create fail!");
		WSACleanup();
		return (-1);
	}
	return (1);
}


void CallServer()
{
	CreateSocket();
	while (connect (sock, (struct sockaddr *) & ServerAddr, sizeof(ServerAddr)) == SOCKET_ERROR)
		printf ("Connect...\n");
}


DWORD GetFile (char *fname)
{
	int   i = 0;
	FILE  *fp;
	int   Filesize = 0;
	int   count,
		  total = 0;
	char  buffer [100];
	char  Senddata [MAX_FILESIZE];

	fp = fopen (fname, "r");
	if (fp == NULL)
	{
		printf ("cannot open this file\n");
		return (0);
	}
	memset (Senddata, 0, MAX_FILESIZE);
	while (!feof (fp))
	{
		count = fread (buffer, sizeof(char), 100, fp);
		if (ferror (fp))
		{
			printf ("read file error");
			break;
		}
		Filesize += count;
		if (Filesize > MAX_FILESIZE)
		{
			printf ("your file is too big\n");
			fclose (fp);
			return (0);
		}
		memcpy ( & Senddata [i],buffer, count);
		i += count;
	}

	fclose (fp);
	Senddata [i] = '\0';
	strcpy (DataPacket.ffname, fname);
	memcpy (DataPacket.ffdata, Senddata, Filesize);
	DataPacket.len = Filesize;
	printf ("%s %d\n", DataPacket.ffname, DataPacket.len);
	return (1);
}


DWORD TCPSendPacket (struct Filedata Packet)
{
	int length;
	length = send (sock, (char *) & Packet, sizeof (DataPacket), 0);
	if (length <= 0)
	{
		printf ("send Filedata error\n");
		closesocket (sock);
		WSACleanup ();
		return (-1);
	}
	return (1);
}



int _tmain()
{
	char  sendfilename [30];
	StartSock ();
	CallServer ();
	printf ("connect ok!\n");
	while (1)
	{
		printf ("Input your filename to send:\n");
		scanf ("%s", sendfilename);
		if (strcmp (sendfilename, "exit") == 0)
			break;
		if (GetFile (sendfilename) == 0)
			continue;
		TCPSendPacket (DataPacket);
	}
	closesocket (sock);
	return (1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -