日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

套接字编程——基于UDP协议

發(fā)布時間:2025/3/18 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 套接字编程——基于UDP协议 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

《UDP用到的大多數(shù)函數(shù)在上一片TCP中已講解,這兒就不再重復了,只有接受和發(fā)送所用的函數(shù)不同》

  • 函數(shù)

  • (1)接受——recvfrom()

    (2)發(fā)送——sendto()

    a. 參數(shù)

    sockfd:?表示一個已經(jīng)建立的socket編號(描述符);

    buf: 接受數(shù)據(jù)的緩沖區(qū);

    len:?緩沖區(qū)的大小;

    flags: 調用操作方式,當設為0時,表示用阻塞方式接收;

    src_addr: 發(fā)送方網(wǎng)絡地址信息,指向裝有發(fā)送方地址的緩存區(qū); ?

    addrlen: 指向src_addr緩存區(qū)長度值;

    b. 返回值

    ? ?成功返回讀入/發(fā)送的字節(jié)數(shù),失敗返回-1。


    2. 程序實現(xiàn)圖

    (1). 服務器的工作流程:首先調用socket函數(shù)創(chuàng)建一個Socket,然后調用bind函數(shù)將其與本機地址以及一個本地端口號綁定,接收到一個客戶端時,服務器顯示該客戶端的IP地址,并將字串返回給客戶端。

    (2). 客戶端的工作流程:首先調用socket函數(shù)創(chuàng)建一個Socket,填寫服務器地址及端口號,從標準輸入設備中取得字符串,將字符串傳送給服務器端,并接收服務器端返回的字符串。最后關閉該socket。 ?

    3. 程序實現(xiàn)

    //udp_server.c1?#include<stdio.h>2?#include<stdlib.h>3?#include<string.h>4?#include<netinet/in.h>5?#include<sys/types.h>6?#include<sys/socket.h>7?8?void?usage(const?char*?argv)9?{???10?????printf("%s?[ip]?[port]\n",argv);11?????exit(0);12?}13?static?int?startup(int?ip,int?port)14?{???15?????//創(chuàng)建套接字16?????int?sock=socket(AF_INET,SOCK_DGRAM,0);17?????if(sock<0)18?????{19?????????perror("socket");20?????????exit(1);21?????}22?????//設置socket23?????struct?sockaddr_in?local;24?????local.sin_family=AF_INET;25?????local.sin_port=htons(port);26?????local.sin_addr.s_addr=inet_addr(ip);27?????//綁定28?????if(bind(sock,(struct?sockaddr*)&local,sizeof(local))<0)29?????{30?????????perror("bind");31?????????exit(2);32?????}33?????return?sock;34?}35?int?main(int?argc,char*?argv[])36?{37?????if(argc!=3)38?????{39?????????usage(argv[0]);40?????????exit(3);41?????}42?????int?r_ip=argv[1];43?????int?r_port=atoi(argv[2]);44?45?????int?server_sock=startup(r_ip,r_port);46?????if(server_sock<0)47?????{48?????????perror("startup");49?????????exit(4);50?????}51?52?????char?buf[1024];53?????struct?sockaddr_in?client;54?????socklen_t?len?=sizeof(client);55?????while(1)56?????{57?????????memset(buf,'\0',sizeof(buf));58?????????ssize_t?size?=?recvfrom(server_sock,buf,sizeof(buf)-1,0,\(struct?sock?addr*)&client,&len);59?????????if(size<0)60?????????{61?????????????perror("recvform");62?????????????exit(1);63?????????}64?????????printf("client?[%s]?[%d]#?%s\n",inet_ntoa(client.sin_addr),\ntohs(client.sin_port),buf);65?????}66?????return?0;67?}//udp_client.c1?#include<stdio.h>2?#include<stdlib.h>3?#include<string.h>4?#include<netinet/in.h>5?#include<sys/types.h>6?#include<sys/socket.h>7?void?usage(const?char*?argv)8?{???9?????printf("%s?[ip]?[port]\n",argv);10?????return?;11?}12?int?main(int?argc,char*?argv[])13?{14?????if(argc!=3)15?????{16?????????usage(argv[0]);17?????????exit(1);18?19?????}20?21?????char*?r_ip=argv[1];22?????int?r_port=atoi(argv[2]);23?24?????int?sock=socket(AF_INET,SOCK_DGRAM,0);25?????if(sock<0)26?????{27?????????perror("socket");28?????????exit(2);29?????}30?31?????struct?sockaddr_in?remote;32?????remote.sin_family=AF_INET;33?????remote.sin_port=htons(r_port);34?????remote.sin_addr.s_addr=inet_addr(r_ip);35?36?????char?buf[1024];37?????while(1)38?????{39?????????memset(buf,'\0',sizeof(buf));40?????????printf("client:?");41?????????fflush(stdout);42?????????gets(buf);43?????????ssize_t?_s=sendto(sock,buf,sizeof(buf),0,\(struct?sockaddr*)&remote,sizeof(remote));44?????????if(_s<0)45?????????{46?????????????perror("sendto");47?????????????exit(3);48?????????}49?????}50?????return?0;51?}//start.sh1?#!/bin/bash2?3?./udp_server?192.168.163.128?8080//makefile1?.PHONY:all2?all:udp_client?udp_server3?udp_client:udp_client.c4?????gcc?-o?$@?$^5?udp_server:udp_server.c6?????gcc?-o?$@?$^?7?.PHONY:clean8?clean:9?????rm?-f?udp_client?udp_server

    輸出結果:

    udp_server.c:

    udp_client.c:

    轉載于:https://blog.51cto.com/10707460/1782321

    總結

    以上是生活随笔為你收集整理的套接字编程——基于UDP协议的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。