📄 cpp1.cpp
字号:
#pragma comment(lib,"ws2_32")
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
#include <stdio.h>
#include "winsock2.h"
#include "ws2tcpip.h"
int main()
{
SOCKET sock;
SOCKET ucli;
//WSADATA is a struct that is filled up by the call
//to WSAStartup
//这是一个结构体,用于调用函数WSAStartup时作为参数
WSADATA wsaData;
//存放ip地址的结构体
sockaddr_in taddr;
sockaddr_in uaddr;
//sockaddr_in tlocal;
//sockaddr_in ulocal;
memset(&taddr,0x0,sizeof(struct sockaddr_in *));
memset(&uaddr,0x0,sizeof(struct sockaddr_in *));
//初始化winsock,每次必须最先调用
int wsaret=WSAStartup(0x101,&wsaData);
//WSAStartup returns zero on success.
//If it fails we exit.
//测试初始化是否成功
if(wsaret!=0)
{
cout<<"WSAStartup failed!\n";
return 0;
}
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
ucli=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
//The sockaddr_in specifies the address of the socket
//for TCP/IP sockets. Other protocols use similar structures.
if(sock==INVALID_SOCKET)
{
cout<<"creat tcpsocket failed!\n";
return 0;
}
if(ucli==INVALID_SOCKET)
{
cout<<"creat udpsocket failed!\n";
return 0;
}
taddr.sin_family=AF_INET; //Address family
taddr.sin_addr.s_addr=inet_addr("10.20.6.58"); //argv[1]%%%%%%%%%%%%%%%%%%%
taddr.sin_port=htons(8007);//argv[2]%%%%%%%%%%%%%%%%%%
//tlocal.sin_family=AF_INET; //Address family
//tlocal.sin_addr.s_addr=inet_addr("10.20.6.58"); //argv[1]%%%%%%%%%%%%%%%%%%%
//tlocal.sin_port=htons((u_short)6000);//%%%%%%%%%%%%%%%%%%
//ulocal.sin_family=AF_INET; //Address family
//ulocal.sin_addr.s_addr=inet_addr("10.20.6.58"); //argv[1]%%%%%%%%%%%%%%%%%%%
//ulocal.sin_port=htons((u_short)8000);//%%%%%%%%%%%%%%%%%%
//绑定服务器的ip地址和端口号
//if(bind(tclient,(sockaddr*)&tlocal,sizeof(tlocal))!=0)
//{
//cout<<"bind tcpsocket failed!\n";
//}
//if(bind(uclient,(sockaddr*)&ulocal,sizeof(ulocal))!=0)
//{
//cout<<"bind udpsocket failed!\n";
//}
if(connect(sock,(SOCKADDR*)&taddr,sizeof(struct sockaddr))!=0)
{
cout<<"connect failed!"<<WSAGetLastError();
closesocket(sock);
return 0;
}
cout<<"Congratulations!! Connect to TCP server successfully!\n";
static char st1[30]="GET UDP PORT";
static char st2[30]="GET CUR TIME";
int sendsize1,sendsize2;
sendsize1=send(sock,st1,sizeof(st1),0);
if(sendsize1==SOCKET_ERROR||sendsize1!=sizeof(st1))
{
cout<<"send failed!";
closesocket(sock);return 0;
}
cout<<"Request for UDP Port by TCP";//###########
char ch,recvbuffer[10],text[1000];
int size=0,serverport,i,j,k,l;
//while(size==0)
u_long mode=1;
ioctlsocket(sock,FIONBIO,(unsigned long*)&mode);//设置Userver为Nonblocking模式
ioctlsocket(ucli,FIONBIO,(unsigned long*)&mode);
for(k=0;k<9000;k++)
{for(l=0;l<9000;l++){}}
if(size=recv(sock,recvbuffer,10,0)==SOCKET_ERROR)
//cout<<recvbuffer;
{cout<<"recv fail"<<WSAGetLastError();
return 0;}
if(size==2)
{i=(short int)recvbuffer[0];
j=(short int)recvbuffer[1];
i<<=8;
serverport=i+j;
cout<<"Get UDPServerport:"<<serverport;
}
uaddr.sin_family=AF_INET; //Address family
uaddr.sin_addr.s_addr=inet_addr("10.20.6.58"); //argv[1]%%%%%%%%%%%%%%%%%%%
uaddr.sin_port=htons((u_short)serverport);
cout<<"\n1.Get current time(TCP)\n";
cout<<"2.Echo Mode(UDP)\n";
cout<<"3.Exit the program\n";
getchar(ch);
if(ch=='1')
{sendsize2=send(sock,st2,sizeof(st2),0);
if(sendsize2==SOCKET_ERROR||sendsize2!=sizeof(st2))
{
cout<<"send failed!";
closesocket(sock);return 0;
}
cout<<"Request for Current time by TCP\n";//###########
}
if(ch=='2')
{
char buffer[1000];
sockaddr_in fromaddr;
memset(&fromaddr,0x0,sizeof(struct sockaddr_in *));
int fromlen=sizeof(fromaddr);
cin.getline(text,1000);
int len=sendto(ucli,text,1000,0,(struct sockaddr*)&uaddr,sizeof(uaddr));
if(len==SOCKET_ERROR||len!=sizeof(text))
{cout<<"sendto failed!";
closesocket(ucli);return 0;
}
if(recvfrom(ucli,buffer,1000,0,(struct sockaddr*)&fromaddr,&fromlen)<0)
{cout<<"recvfrom failed!";
closesocket(ucli);return 0;}
if(fromaddr.sin_addr.s_addr==inet_addr("10.20.6.58")&&fromaddr.sin_port==htons((u_short)serverport))
{int k=strcmp(text,buffer);
if(k==0)
cout<<buffer<<" received by UDP client\n";//###############
}
else cout<<"ERROR!!";return 0;
}
if(ch=='3')
{closesocket(sock);
closesocket(ucli);
WSACleanup();return 0;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -