0
点赞
收藏
分享

微信扫一扫

C++实现txt文件传输 上


思路:

socket建立连接。然后把文件读进char*buffer。

把buffer传输完。接收到以后复原。

今天弄了一天。暂时就弄出来了txt格式。EXCEL和图片那些都没搞明白。

放个今天的马。这个是接收端。

Server.h

#define _WINSOCK_DEPRECATED_NO_WARNINGS 
#ifndef _SERVER_H
#define _SERVER_H
#include <fstream>
#include <iostream>
#include <string>
#include <thread>
#include <WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
SOCKET cl[4];
using namespace std;
class Server
{
public:Server();
~Server();
void SocketInit();
void SetConnect();
static void TaskThread(int id);

private:
SOCKET s;
SOCKET cnfd;

};


#endif //_SERVER_H
#include "Server.h"
Server::Server(){

WSADATA wsadata;
WORD ver = MAKEWORD(2, 2);
if (::WSAStartup(ver, &wsadata) < 0)
{

exit(0);
}

for (int i = 0; i < 4; i++)
cl[i] = -1;
}

Server::~Server()
{
::WSACleanup();


}
void Server::SocketInit(){

s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(4567);
sin.sin_addr.S_un.S_addr = inet_addr("192.168.1.3");

if (::bind(s, (LPSOCKADDR)&sin, sizeof(sin))==SOCKET_ERROR)
{
return;
}
if (::listen(s, 5) == SOCKET_ERROR)
{

return;
}

};
void Server::SetConnect(){
cout << "NoBody" << endl;
while (1)
{
cnfd = 0;
sockaddr_in re;
int n = sizeof(re);
cnfd = ::accept(s, (SOCKADDR*)&re, &n);
if (cnfd == INVALID_SOCKET)
{
return;
}
int ONE = 0;
int i;
for ( i = 0; i < 4; i++)
{
if (cl[i] == -1)
{
ONE = 1;
break;
}
}
if (ONE)
{
cl[i] = cnfd;
cnfd = 0;
thread t(TaskThread,i);
t.detach();
}
else
{
char sorry[8] = "wait...";
::send(cnfd, sorry, 8, 0);
}
}
closesocket(s);


};
void Server::TaskThread(int id)
{
int num = 0;
char hello[] = "hello";
::send(cl[id], hello, 6, 0);
ofstream out("1.txt", ios_base::binary | ios_base::out|ios::app);
char buf[255];
int nR;
while ((nR = ::recv(cl[id], buf, 256, 0))>0)
{

cout << ++num << endl;
cout << "nR is " << nR << endl;
if (out.is_open())
{
cout << "gGGGGGGg" << endl;
out.write((char*)buf,nR);
cout << endl;
}
::send(cl[id],buf,nR, 0);

//nR = ::recv(cl[id], buf, 256, 0);
}

if (out.is_open())
out.close();
closesocket(cl[id]);
cl[id] = -1;
ifstream in("1.txt");
char buuf[255];
if (in.is_open())
{
in.getline(buuf, 10);
in.close();
}

cout << buuf << endl;
cin.get();

};
int main()
{
Server sver;
sver.SocketInit();
sver.SetConnect();




}

举报

相关推荐

0 条评论