linux UDP C++網路程式設計演示
阿新 • • 發佈:2021-02-10
技術標籤:UbuntuUNIX系統程式設計C++併發程式設計實戰網路socketc++
1.引用標頭檔案
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
2.建立資料報套接字
int socket_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); if (socket_fd<0) { perror("建立socket失敗"); exit(-1); }
3.繫結套接字
struct sockaddr_in server_addr; bzero(&server_addr, sizeof(server_addr)); server_addr.sin_port=htons(port); server_addr.sin_addr.s_addr = htons(INADDR_ANY); server_addr.sin_family = AF_INET; if(bind(socket_fd,(struct sockaddr*)&server_addr, sizeof(server_addr))) { perror("繫結UDP服務失敗"); close(socket_fd); exit(-1); }
4.接收與傳送資料
sendto(socket_fd,send_buf, strlen(send_buf),0,(struct sockaddr*)&client_addr,client_addr_len); int recv_len = recvfrom(socket_fd,recv_buf, sizeof(recv_buf),0,(struct sockaddr*)&client_addr,&client_addr_len); if (recv_len>0) { printf("%s\n",recv_buf); }
伺服器完整程式碼:
#include <iostream>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
std::cout << "UDP網路程式設計!" << std::endl;
unsigned short port=8000;
int socket_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (socket_fd<0)
{
perror("建立socket失敗");
exit(-1);
}
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_port=htons(port);
server_addr.sin_addr.s_addr = htons(INADDR_ANY);
server_addr.sin_family = AF_INET;
if(bind(socket_fd,(struct sockaddr*)&server_addr, sizeof(server_addr)))
{
perror("繫結UDP服務失敗");
close(socket_fd);
exit(-1);
}
char send_buf[512]="udp server message";
char recv_buf[512]="";
unsigned short client_port = 9000;
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(sockaddr_in);
bzero(&client_addr, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_port =htons(client_port);
client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
while (true)
{
sendto(socket_fd,send_buf, strlen(send_buf),0,(struct sockaddr*)&client_addr,client_addr_len);
int recv_len = recvfrom(socket_fd,recv_buf, sizeof(recv_buf),0,(struct sockaddr*)&client_addr,&client_addr_len);
if (recv_len>0)
{
printf("%s\n",recv_buf);
}
}
return 0;
}
客戶端完整程式碼:
//
// Created by linux on 2021/2/9.
//
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(int argc,char *argv[])
{
unsigned short port = 9000;
int socket_fd = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
if (socket_fd<0)
{
perror("建立socket失敗");
exit(-1);
}
struct sockaddr_in server_addr;
socklen_t server_addr_len = sizeof(server_addr);
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_port=htons(port);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
server_addr.sin_family = AF_INET;
bind(socket_fd,(struct sockaddr*)&server_addr, sizeof(server_addr));
char recv_buf[512] = "";
char send_buf[512] = "udp client data";
unsigned short client_port = 8000;
struct sockaddr_in client_addr;
socklen_t client_addr_len = sizeof(sockaddr_in);
bzero(&client_addr, sizeof(client_addr));
client_addr.sin_family = AF_INET;
client_addr.sin_port =htons(client_port);
client_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
while (true)
{
sendto(socket_fd,send_buf, sizeof(send_buf),0,(struct sockaddr*)&client_addr,client_addr_len);
int recv_len = recvfrom(socket_fd,recv_buf, sizeof(recv_buf),0,(struct sockaddr*)&server_addr, &server_addr_len);
if (recv_len>0)
{
printf("接收的長度:%d,資料:%s\r\n",recv_len,recv_buf);
}
}
close(socket_fd);
return 0;
}