udpのsocketデータ転送
3153 ワード
SOcketの構成について:
1、sokcetソケットの作成
2、作成したsocketのアドレスとポートをバインドするために、転送のプロトコルを指定し、一般的にAF_を採用するINET、データの伝送フォーマットは一般的に(SOCK_STREAM、SOCK_DGRAM)
3、ファイル識別子を開き、データの送信を開始する
udpクライアントCODE:
1、sokcetソケットの作成
2、作成したsocketのアドレスとポートをバインドするために、転送のプロトコルを指定し、一般的にAF_を採用するINET、データの伝送フォーマットは一般的に(SOCK_STREAM、SOCK_DGRAM)
3、ファイル識別子を開き、データの送信を開始する
udpクライアントCODE:
#include
#include
#include
#include
#include
#include
#include
#include
void client(int sock){
//2、 socket
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
//3、 、
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5188);
servaddr.sin_addr.s_addr = inet_addr("127.0.0.1");
//4、
int ret;
char sendbuf[1024] = {0};
char recvbuf[1024] = {0};
//5、 ( )
while(fgets(sendbuf, sizeof(sendbuf), stdin) != NULL){
sendto(sock, sendbuf, strlen(sendbuf), 0, (struct sockaddr *)&servaddr, sizeof(servaddr));
//6、 ,
ret = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, NULL, NULL);
if(ret == -1){
perror("recvfrom");
exit(EXIT_FAILURE);
}
//fputs(recvbuf, stdout); //
//7、
memset(sendbuf, 0, sizeof(sendbuf));
memset(recvbuf, 0, sizeof(recvbuf));
}
//8、 socket
close(sock);
}
int main(void){
int sock;
//1. socket
if((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0){
perror("socket");
exit(EXIT_FAILURE);
}
client(sock);
return 0;
}
UDP CODE:
#include
#include
#include
#include
#include
#include
#include
#include
void server(int sock){
//1、
char recvbuf[1024] = {0};
//2、 socket
struct sockaddr_in peeraddr;
socklen_t peerlen;
int n;
while(1){
//
peerlen = sizeof(peeraddr);
//3、
memset(recvbuf, 0, sizeof(recvbuf));
//4、
n = recvfrom(sock, recvbuf, sizeof(recvbuf), 0, (struct sockaddr *)&peeraddr, &peerlen);
//5、
if(n == -1){
perror("recvfrom");
exit(EXIT_FAILURE);
}else if(n > 0){
//6、 , ,
fputs(recvbuf, stdout);
//7、 ( )
sendto(sock, recvbuf, n, 0, (struct sockaddr *)&peeraddr, peerlen);
}
}
// socket
close(sock);
}
int main(void){
int sock;
// socket
if((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0){
perror("socket error");
exit(EXIT_FAILURE);
}
// socket
struct sockaddr_in servaddr;
memset(&servaddr, 0, sizeof(servaddr));
// socket 、
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(5188);
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
// socket
if(bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
perror("bind error");
exit(EXIT_FAILURE);
}
server(sock);
return 0;
}