网络编程2

来源:互联网 发布:淘宝高仿大牌女包推荐 编辑:程序博客网 时间:2024/06/15 01:52
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <winsock2.h>


#define _MagicNumberT 0xFFFE3141 // TCP 数据包头部标识符
#define _MagicNumberU 0xFFEF3141 // UDP 数据包头部标识符
#define _SNDID_Len 32 // 学号长度
#define _PostData_Len 256 // 最大数据长度
#pragma comment(lib,"ws2_32.lib")
#pragma   comment(linker,   "/subsystem:console ")


typedef struct 
{
DWORD magicnum;
char SNSID[_SNDID_Len]; // 学号字段,长度32
char PostData[_PostData_Len]; // 数据字段,长度256
}_A1_Packet;


void main()
{
// Initialize Winsock


WSADATA wsaData;
int errorCode;
int iResult=WSAStartup(MAKEWORD(2,2), &wsaData);
if (iResult!=0)
{
printf("初始化套接字失败\n");
return ;
}
SOCKET TCPSocket;
TCPSocket=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 创建TCP 套接字。
//设置Server 端IP 和端口:(TCP/UDP 相同)
if (TCPSocket==INVALID_SOCKET) 


{
printf("创建套接字失败\n");
closesocket(TCPSocket);
WSACleanup();
return ;
}


SOCKADDR_IN server;
server.sin_family = AF_INET;
server.sin_port = htons(8888);
server.sin_addr.s_addr = inet_addr("");
errorCode=connect(TCPSocket, (struct sockaddr *)&server, sizeof(server)); //用TCP 连接服务器
if (SOCKET_ERROR == errorCode)
{
printf("连接服务器失败\n");
closesocket(TCPSocket);
WSACleanup();    //
return ;
}




// 构造请求数据包:
_A1_Packet pkgBuffer;
pkgBuffer.magicnum = _MagicNumberT; // 用TCP 数据包头部标识符填充magicnum


// 用学号填充SNSID[],末尾填\0
int IDlen=strlen("201272713");     //学号长度
strcpy(pkgBuffer.SNSID,"201272713");
pkgBuffer.SNSID[IDlen]='\0';




errorCode=send(TCPSocket,(char *)&pkgBuffer,sizeof(pkgBuffer),0);// 发送TCP 请求包
if (SOCKET_ERROR == errorCode )
{
printf("向服务器发送数据失败\n");
closesocket(TCPSocket);
WSACleanup();    //
return ;
}


errorCode=recv(TCPSocket,(char *)&pkgBuffer,sizeof(pkgBuffer),0);// 接收服务器端的回应
if (SOCKET_ERROR==errorCode)
{
printf("接受服务器数据失败\n");
closesocket(TCPSocket);    
WSACleanup();    
return ;
}


closesocket(TCPSocket);




//初始化UDP Socket
SOCKET UDPSocket;
UDPSocket=socket(AF_INET, SOCK_DGRAM,IPPROTO_UDP);// 创建UDP套接字
if (UDPSocket==INVALID_SOCKET) 
{
printf("创建套接字失败\n");
closesocket(UDPSocket);
WSACleanup();
return ;
}




//修改magicnum 为UDP 数据包头部标识。填写学号SNSID[]和提交的数据PostData[]。




pkgBuffer.magicnum = _MagicNumberU;//用UDP 数据包头部标识符填充magicnum




// 使用sendto()发送到服务器。
errorCode=sendto(UDPSocket,(char *)&pkgBuffer,sizeof(pkgBuffer), 0, (struct sockaddr *)&server,sizeof(server));
printf("发送%d字节数据包,等待服务器回应....\n",errorCode);
printf("SNSID:%s\n",pkgBuffer.SNSID);
printf("Data:%s\n",pkgBuffer.PostData);




//(用recvfrom()等待服务器的返回信息,检查返回数据包中SNSID[]的数据,若为OK!则
//表示成功。(提交数据后请仔细确认服务器的返回信息)
int addrlen=sizeof(struct sockaddr_in);
printf("\n向目标发送数据:\n");




errorCode=recvfrom(UDPSocket,(char *)&pkgBuffer,sizeof(pkgBuffer),0,(struct sockaddr *)&server,&addrlen);
printf("UDP发送数据完毕,等待回应... %s\n",pkgBuffer.SNSID);


closesocket(UDPSocket);
WSACleanup();
getch();
}
原创粉丝点击