Linux中的UDP通訊
客戶端:
#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>
/*
問題: UDP通訊套接字描述符沒有同任何地址繫結,那麼在這個套接字描述符上面傳送資料有什麼意義 ???
是不是系統預設將其與本機地址繫結了?
答案:假如c_fd沒有顯式和任何本地"埠"繫結,那麼核心會為其繫結一個臨時"埠",
以便其可以通過該"埠"將資料傳送到目的地址 !!!
>>>同Unix域套接字通訊不同,這裡不用顯示繫結套接字和地址,伺服器也能找到客戶端 ~
*/
int main(void){
int c_fd;
struct sockaddr_in s_addr;
char buf[MAXLINE];
char msg[MAXLINE];
/* 建立UPD套介面,SOCK_DGRAM指明為UDP通訊套接字 */
if((c_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
printf("socket error\n");
/* 初始化伺服器地址 */
s_addr.sin_family = AF_INET;
inet_pton(AF_INET,"127.0.0.1",(void *)&s_addr.sin_addr.s_addr);
s_addr.sin_port = htons(3636);
/* 向伺服器傳送資料 */
fgets(msg,MAXLINE,stdin);
if(sendto(c_fd,msg,strlen(msg),0,(struct sockaddr *)&s_addr,sizeof(s_addr)) < 0)
printf("send error\n");
/* 接收伺服器的資料,不需要關心是誰發來的 */
if(recvfrom(c_fd,buf,MAXLINE,0,NULL,NULL) < 0)
printf("recvfrom error\n");
printf("server send: %s\n",buf);
/* 關閉套接字 */
close(c_fd);
exit(0);
}
伺服器端:
#include "apue.h"
#include <netdb.h>
#include <sys/socket.h>
#include "jiq/daemon.c"
#define BUFLINE 128
#define MAXADDRLEN 256
int main(void){
int s_fd;
int len;
char buf[BUFLINE];
struct sockaddr_in s_addr; //Linux network-addr
struct sockaddr c_addr;
char *msg="I Have Got your meg\n";
/*
let this server become daemon
(1)系統自舉時啟動
(2)沒有控制終端
(3)系統關閉時終止
(4)後臺執行
*/
daemonize("server");
/* 建立UDP套接字,SOCK_DGRAM指明為UDP通訊套接字 */
if((s_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
printf("socket error\n");
/* 繫結套接字和伺服器網路地址 */
s_addr.sin_family = AF_INET;
s_addr.sin_addr.s_addr = htonl(INADDR_ANY);//核心指定地址
s_addr.sin_port = htons(3636);
if(bind(s_fd,(struct sockaddr *)&s_addr,sizeof(s_addr)) < 0)
printf("bind error\n");
for(;;){
printf("\nwaiting for ask...\n");
/* 接收資料,並記下是誰發來的 */
if(recvfrom(s_fd,buf,BUFLINE,0,&c_addr,&len) < 0)
printf("recvfrom error\n");
/* 向客戶端傳送資料 */
if(sendto(s_fd,msg,strlen(msg),0,&c_addr,len) < 0)
printf("sendto error\n");
printf("client send: %s",buf);
memset(buf,0,MAXLINE); //clear buf
}
/* 關閉套接字 */
close(s_fd);
exit(0);
}
相關文章
- ACE中UDP通訊UDP
- udp網路通訊UDP
- Python - UDP通訊PythonUDP
- UDP雙向通訊UDP
- java實現UDP通訊JavaUDP
- 網路通訊1:UDPUDP
- SOCKET通訊中TCP、UDP資料包大小的確定TCPUDP
- python UDP套接字通訊PythonUDP
- SwiftNIO初探-簡單UDP通訊SwiftUDP
- 通訊協議:HTTP、TCP、UDP協議HTTPTCPUDP
- Linux中的TCP通訊LinuxTCP
- C# 通過socket實現UDP 通訊C#UDP
- 使用UDP如何進行網路通訊UDP
- Java網路程式設計UDP通訊原理Java程式設計UDP
- QT開發的即時通訊軟體(基於UDP)QTUDP
- Visual C++設計UDP協議通訊示例C++UDP協議
- Socket,TCP,UDP,HTTP基本通訊原理和OC版本DemoTCPUDPHTTP
- C# UDP通訊 ReceiveAsync() 一直等待問題C#UDP
- Java&Python的TCP&UDP通訊-網路程式設計JavaPythonTCPUDP程式設計
- Android基於UDP的區域網聊天通訊(有完整Demo)AndroidUDP
- .Net開發筆記(十四) 基於“泵”的UDP通訊(接上篇)筆記UDP
- TCP和UDP實現簡單一對一通訊TCPUDP
- 前端中的通訊(一)前端
- 在Linux中,程序間通訊方式有哪些?Linux
- C# wm6透過udp協議和pc通訊C#UDP協議
- Linux程式間通訊中的檔案和檔案鎖Linux
- Linux 的程式間通訊:管道Linux
- python中的訊號通訊 blinkerPython
- Linux程式間通訊Linux
- 程式間通訊——LINUXLinux
- Linux TCP通訊示例LinuxTCP
- linux 串列埠通訊Linux串列埠
- 消除linux log中的大量Received SNMP packet(s) from UDPLinuxUDP
- Android與物聯網裝置通訊-UDP&TCP協議AndroidUDPTCP協議
- 即時通訊技術文集(第10期):IM通訊協議該選TCP還是UDP [共12篇]協議TCPUDP
- Vue元件通訊中eventBus的使用Vue元件
- 淺析vue中的元件通訊Vue元件
- 程序間的通訊(訊號通訊)