//客戶端
#include <iostream>
#include <winsock2.h>
#include <wheel/unit.hpp>
int main(){
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
SOCKET Client;
Client = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
sockaddr_in sockAddrIn;
memset(&sockAddrIn,0, sizeof(sockAddrIn));
sockAddrIn.sin_family=AF_INET;
sockAddrIn.sin_port=wheel::unit::little_swap16(8080);
std::size_t value_ip;
wheel::unit::inet4_pton("127.0.0.1", value_ip);
sockAddrIn.sin_addr.s_addr =wheel::unit::little_swap32(value_ip);
//設置socket的選項
int time_out=2000;
if(setsockopt(Client,SOL_SOCKET,SO_RCVTIMEO,(char*)&time_out,sizeof(time_out))!=0){
return -1;
}
while (true){
char buf[100];
int len = sizeof(sockAddrIn);
scanf("%s",buf);
int sendRet = sendto(Client, buf, sizeof(buf), 0, (sockaddr*)&sockAddrIn, sizeof(sockAddrIn));
if (sendRet == -1) {
std::cout<<WSAGetLastError ()<<std::endl;
std::cout << "send failed"<< std::endl;
break;
}else{
std::cout << "send success"<< std::endl;
}
int recvRet = recvfrom(Client,buf, sizeof(buf),0,(sockaddr*)&sockAddrIn,&len);
if(recvRet==-1){
continue;
}else{
std::cout<<buf<<std::endl;
}
}
return 0;
}
#include <wheel/unit.hpp>
#include <iostream>
#include <WinSock2.h>
int main()
{
WSADATA wsadata;
WSAStartup(MAKEWORD(2, 2), &wsadata);
SOCKET sfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
sockaddr_in add;
memset(&add, 0, sizeof(add));
add.sin_family = AF_INET;
add.sin_port = wheel::unit::little_swap16(8080);
std::size_t value_ip;
wheel::unit::inet4_pton("127.0.0.1", value_ip);
add.sin_addr.S_un.S_addr= wheel::unit::little_swap32(value_ip);
int ret = bind(sfd, (sockaddr*)&add, sizeof(add));
if (ret == SOCKET_ERROR){
return 0;
}
while (true) {
char buf[100]={0};
int len =sizeof(add);
int recvRet = recvfrom(sfd, buf, sizeof(buf), 0, (sockaddr*)&add, &len);
//-1表示接收失敗
if (recvRet == -1) {
continue;
}
//將小寫字母轉換爲大寫
for (int i = 0; i < len; i++) {
if (buf[i] >= 'a' && buf[i] <= 'z') {
buf[i] = 'A' + buf[i] - 'a';
}
}
//第五個參數:指定要發送的目標ip和端口號
//第六個參數:第五個參數的長度
int sendRet = sendto(sfd, buf, sizeof(buf), 0, (sockaddr*)&add, sizeof(add));
if (sendRet == -1) {
std::cout << "send failed" << std::endl;
break;
}
else {
std::cout << "send success" << std::endl;
}
}
return 0;
}