关闭

socket文件接收

标签: socket
68人阅读 评论(0) 收藏 举报
分类:
// Server.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "windows.h"
#include <WinSock.h>
#include <iostream>


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


using namespace std;
#define PORT 3574
#define IP_ADDRESS "10.3.15.11"


DWORD WINAPI ClientThread(LPVOID lpParameter)
{
SOCKET ClientSocket = (SOCKET)lpParameter;
int length = 0;
char buf[1024];
FILE * fDes = fopen("F:/3.MP3", "wb");
while((length = recv(ClientSocket, buf, sizeof(buf), 0))>0){   
if ( length == 0 || length == SOCKET_ERROR){
cout << "客户端退出!" << endl ;
break;
}
fwrite(buf, 1024, length, fDes);
printf("接收了%d字节!\n",length);
memset(buf, 0, 1025);
}
printf("文件传输成功!\n");
return 0;
}




int main(int argc, char * argv[])
{
WSADATA ws;
SOCKET ServerSocket, ClientSocket;
struct sockaddr_in LocalAddr, ClientAddr;
int Ret = 0;
int AddrLen = 0;
HANDLE hThread = NULL;


//初始化Windows端口
if (WSAStartup(MAKEWORD(2,2), &ws) != 0 )
{
cout << "初始化Windows Socket失败::" << GetLastError() << endl;
return -1;
}


//创建端口
ServerSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (ServerSocket == INVALID_SOCKET)
{
cout << "建立socket端口失败::" << GetLastError() << endl;
return -1;
}


LocalAddr.sin_family = AF_INET;
LocalAddr.sin_addr.s_addr = inet_addr(IP_ADDRESS);
LocalAddr.sin_port = htons(PORT);
memset(LocalAddr.sin_zero, 0x00, 8);


//绑定端口
Ret = bind(ServerSocket, (struct sockaddr * )&LocalAddr, sizeof(LocalAddr));
if ( Ret != 0 )
{
cout << "绑定端口失败::" << GetLastError() << endl;
return -1;
}


Ret = listen(ServerSocket, 10);
if ( Ret !=0 )
{
cout << "监听端口失败::" << GetLastError() << endl;
return -1;
}

cout << "服务端已启动" << endl;


while(true)
{
AddrLen = sizeof(ClientAddr);
ClientSocket = accept(ServerSocket, (struct sockaddr *)&ClientAddr, &AddrLen);
if ( ClientSocket == INVALID_SOCKET)
{
cout << "Accept失败::" << GetLastError() << endl;
break;
}
cout << "Accept成功::"<< endl;


cout << "客户端连接::" << inet_ntoa(ClientAddr.sin_addr) << ":" << ClientAddr.sin_port << endl;
hThread = CreateThread(NULL, 0, ClientThread, (LPVOID)ClientSocket, 0, NULL);
if ( hThread == NULL )
{
cout << "建立线程失败!" << endl;
break;
}


CloseHandle(hThread);
}


closesocket(ServerSocket);
closesocket(ClientSocket);
WSACleanup();


return 0;
}

0
0
查看评论

Android下Socket收发文件初探

之前有一篇文章是介绍WIndows下Socket编程收发文件的,现在介绍Android端的Socket收发文件,其中还会介绍自动解锁,手写等技术。        Java中Socket默认是阻塞式的,也就是说它会从Socket流中读取C++...
  • gxwzmm
  • gxwzmm
  • 2013-11-27 16:28
  • 7228

socket实现文件传输功能

要实现的功能为:client 从 server 下载一个文件并保存到本地。 编写这个程序需要注意两个问题: 1) 文件大小不确定,有可能比缓冲区大很多,调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇到同样的情况。 要解决这个问题,可以使用 while 循环,...
  • yimingsilence
  • yimingsilence
  • 2017-06-03 21:12
  • 1760

socket文件传输示例

Server端代码: /*************************************************************************    > File Name: Server.c    > Author...
  • xipiaoyouzi
  • xipiaoyouzi
  • 2015-02-06 11:05
  • 1062

Socket在阻塞模式下的信息收发和文件接收

 Socket在阻塞模式下的信息收发和文件接收概述:收发数据是网络编程的主题,在套接字上收发数据我们可以使用send和recv,当然还有Winsock2的WSASend和WSARecv。我们这里只讨论send和recv。套接字可以工作在阻塞态和非阻塞态,,阻塞态就是函数调用会停住,非阻塞态...
  • dylgsy
  • dylgsy
  • 2006-06-29 15:28
  • 4206

C# socket 发送接收消息与发送接收文件 群发文件

公司需要实现群发文件的功能,查阅了一下网上发现几乎没有这方面的源码,后来在以为前人的基础上改了出来,其实是非常简单的,向每个在网上贴源码的同学致敬!!! 注:结构里边我用的cskin控件,在用代码时只需要把个别窗口控件换一下就可以; 以下是服务端的代码 using System; using ...
  • qq_29701359
  • qq_29701359
  • 2016-11-11 16:32
  • 1897

java socket 服务器代码 自动接收文件并存储服务器 - 服务器多线程支持和多个客户端同时通信:

public static void main(String[] args) { try{ ServerSocket ss=new ServerSocket(666); ss.setSoTimeout(0); System.out.println("accept超时时间设置为: "...
  • hemeinvyiqiluoben
  • hemeinvyiqiluoben
  • 2017-05-05 19:46
  • 193

C++和java通过Socket批量发送和接收文件(C++客户端发送,java服务端接收)

C++客户端代码: #include #include #include #include #include #include #pragma comment(lib,"ws2_32.lib") using namespace std; size_t ge...
  • u014080185
  • u014080185
  • 2017-11-30 21:03
  • 139

socket 接收文件死锁

<br /><br /><br />    现在我有客户端和服务端两个程序,<br />客户端发送文件给服务端<br /><br />代码如下:<br /><br />发...
  • lq547854
  • lq547854
  • 2010-09-30 11:00
  • 195

MFC socket 发送文件

MFC TransmitFile 函数直接封装了 文件打开 读 ,送往socket 的过程,使用它 直接绑定一个文件 即可传送: { //begin //获取目录所有文件 CFileFind tempFind; CString path=N9000_CONFI...
  • u011244446
  • u011244446
  • 2015-06-27 16:06
  • 941

利用Socket传输文件时,接收方判断文件末尾的方法

Socket传输文件。一般采用文件流的方式。无论要传输的文件什么样的类型,它都是文件,我们都可以将它看成是文本文件。尽管用记事本打开后它有可能乱码。这一种意识很重要,因为这能有效地降低搭建程序的难度,简化问题的复杂性。 既然把文件都看成是文本文件了,那么就很容易理解要传输的文件是由一个一个...
  • chaijunkun
  • chaijunkun
  • 2010-03-17 10:59
  • 6026
    个人资料
    • 访问:790次
    • 积分:22
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:4篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档