经常在CSDN贴吧看见很多关于网络之间传输的例子(比如传输截屏文件),所以很想写一个作为学习。
此程序设定很简单,就是在本地传输。当然,要扩展到网络也很简单,改个ip就ok了。
基本思路:
双方遵循一个包头格式,根据包头确定之后的操作。
服务器代码:
#include <string>
#include <io.h>
#define PORT 6666
struct PacketHeader
{
char code[10]; // 指令:"EOF"=断开连接 "PIC"=接收图片
char name[50]; // 名字:包括后缀
LONG32 size; // 大小:字节
PacketHeader()
{
memset(code,0,sizeof(code));
memset(name,0,sizeof(name));
size = 0;
}
};
// 在本地传输图片
void server()
{
WSADATA wd;
int ret = WSAStartup(MAKEWORD(2,2),&wd);
if(ret != 0)
{
cout<<"Initialize Winsock Failed! "<<GetLastError()<<endl;;
return;
}
cout<<"WSAStartup OK"<<endl;
sockaddr_in addr_serv,addr_cli;
int sock_listen,sock_accept;
try{
sock_listen = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sock_listen == SOCKET_ERROR)
{
cout<<"create socket failed! "<<GetLastError()<<endl;
throw 1;
}
cout<<"socket OK"<<endl;
memset((void*)&addr_serv,0,sizeof(sockaddr));
addr_serv.sin_family = AF_INET;
addr_serv.sin_addr.S_un.S_addr = INADDR_ANY;
addr_serv.sin