您的位置:首页 > 理论基础 > 计算机网络

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

2017-08-28 14:22 330 查看


源代码已上传。

先简单讲一下流程:

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();

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: