c++ 通过socket(网络套接字)传输图片(服务端)

源代码已上传。

先简单讲一下流程:

WinSock初始化->创建Socket->本地捆绑bind->监听listen->连接connect->传输receive->关闭close

#include<winSock2.h>//这个不要忘了

#pragmacomment(lib,"ws2_32.lib")

//提供了对以下网络相关API的支持

//若使用其中的API,则应该将ws2_32.lib加入工程

1:WinSock初始化

WORDwVersionRequested;//双字节;高字节存取副版本号,低字节存取高版本号。

WSADATAwsaData;//一种结构,存取套接字实现的具体信息

wVersionRequested= MAKEWORD(2, 2);

result =WSAStartup(wVersionRequested, &wsaData);

if (result != 0)

{

       printf("WSAStartup()failed!\n");

       return 0;

}

2:创建Socket

sListen =socket(AF_INET, SOCK_STREAM, 0);

if (sListen ==INVALID_SOCKET)

{

       WSACleanup();

       cout << "socket() faild!"<< endl;

       return 0;

}

3:本地捆绑

structsockaddr_in saServer;   

saServer.sin_family= AF_INET; //地址家族 

saServer.sin_port= htons(9210); //服务器端口 

saServer.sin_addr.S_un.S_addr= htonl(INADDR_ANY); //服务器地址

length =sizeof(saServer);

result =bind(sListen, (struct sockaddr *)&saServer, length);

if (result ==SOCKET_ERROR)

{

       cout << "bind() faild!code:" << WSAGetLastError() << endl;

       closesocket(sListen);  

       WSACleanup();

       return 0;

}

4:监听

result =listen(sListen, 5);

if (result ==SOCKET_ERROR)

{

       cout << "listen() faild!code:" << WSAGetLastError() << endl;

       closesocket(sListen); //关闭套接字 

       return 0;

}

5:连接

length =sizeof(saClient);

sConnect =accept(sListen, (struct sockaddr *)&saClient, &length);

if (sConnect ==INVALID_SOCKET)

{

       cout << "accept() faild!code:" << WSAGetLastError() << endl;

       closesocket(sListen); //关闭套接字 

       WSACleanup();

       return 0;

}

6:传输

struct Data

{

       char message[2000];//消息

       int rest;

}data;

while (1)

{

       cout << "接收" << num++<< "信息" <<endl;

       result = recv(sConnect, (char*)&data, sizeof(struct Data), 0);

       if (result == SOCKET_ERROR)

       {

              printf("recv()failed!\n");

              return 0;

       }

       if (result == 0) //客户端已经关闭连接 

       {

              printf("Client has closed theconnection\n");

              break;

       }

       receivePicture.write(data.message, 1024);

       if (data.rest == 0){

              cout << "over"<< endl;

              break;

       }

}

7:关闭

closesocket(sListen);

closesocket(sConnect);

WSACleanup();

 


 


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Simon|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值