Linux Socket C語言網路程式設計:UDP Socket
UDP簡介
- UDP與TCP相比,UDP是沒有連結的協議,可以把他比作電子郵件,收信方不需要確認就可以接收郵件(不需要握手),這一點以TCP協議不同。
下面簡單介紹GitHub上的開源專案TCP-Socket
結果是這樣的
$ ./server &
$ ./client 127.0.0.1
this is a test
this is a test
伺服器端程式碼server.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/ip.h>
const int SERV_PORT = 6000;
const int MAXLINE = 2048;
void dg_echo(int sockfd , struct sockaddr *pcliaddr , socklen_t clilen)
{
int n;
socklen_t len;
char mesg[MAXLINE];
for( ; ;)
{
len = clilen;
if((n = recvfrom(sockfd , mesg , MAXLINE , 0 , pcliaddr , &len)) <0)
{
perror("recvfrom error");
exit(1);
}//if
if((n = sendto(sockfd , mesg , n , 0 , pcliaddr , len)) < 0)
{
perror("sendto error");
exit(1);
}//if
}//for
}
int main(int argc , char **argv)
{
int sockfd;
struct sockaddr_in servaddr , cliaddr;
bzero(&servaddr , sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT);
if((sockfd = socket(AF_INET , SOCK_DGRAM , 0)) < 0)
{
perror("socket error");
exit(1);
}//if
if(bind(sockfd , (struct sockaddr *)&servaddr , sizeof(servaddr)))
{
perror("bind error");
exit(1);
}//if
dg_echo(sockfd , (struct sockaddr *)&cliaddr , sizeof(cliaddr));
}
客戶端程式碼client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
const int SERV_PORT = 6000;
const int MAXLINE = 2048;
void dg_cli(FILE *fp , int sockfd , const struct sockaddr *pservaddr , socklen_t servlen)
{
int n;
char sendline[MAXLINE] , recvline[MAXLINE+1];
while(fgets(sendline , MAXLINE , fp) != NULL)
{
if(sendto(sockfd , sendline , strlen(sendline) , 0 , pservaddr , servlen) < 0)
{
perror("sendto error");
exit(1);
}//if
if( ( n = recvfrom(sockfd , recvline , MAXLINE , 0 , NULL , NULL)) < 0)
{
perror("recvfrom error");
exit(1);
}//if
recvline[n] = '\0';
fputs(recvline , stdout);
}//while
}
int main(int argc , char **argv)
{
int sockfd , t;
struct sockaddr_in servaddr;
if(argc != 2)
{
perror("usage: udpcli <IPaddress>");
exit(1);
}//if
bzero(&servaddr , sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
if((t = inet_pton(AF_INET , argv[1], &servaddr.sin_addr)) <= 0)
{
perror("inet_pton error");
exit(1);
}//if
if((sockfd = socket(AF_INET , SOCK_DGRAM , 0)) < 0)
{
perror("socket error");
exit(1);
}//if
dg_cli(stdin , sockfd , (struct sockaddr *)&servaddr , sizeof(servaddr)) ;
exit(0);
}
Makefile
ALL:
gcc server.c -o server -lm
gcc client.c -o client -lm
- 程式碼來自GitHub帳號,此為學習筆記,原始碼請檢視GitHub
相關文章
- Linux Socket C語言網路程式設計:TCP SocketLinuxC語言程式設計TCP
- Linux Socket C語言網路程式設計:Select SocketLinuxC語言程式設計
- Linux Socket C語言網路程式設計:Pthread Socket [code from GitHub, for study]LinuxC語言程式設計threadGithub
- Linux Socket C語言網路程式設計:Poll Socket [code from GitHub, for study]LinuxC語言程式設計Github
- Linux Socket C語言網路程式設計:Epoll Socket [code from GitHub, for study]LinuxC語言程式設計Github
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Go 語言使用.NET 包實現 Socket 網路程式設計Go程式設計
- socket udpUDP
- socket網路程式設計程式設計
- 網路程式設計-socket程式設計
- 【Linux網路程式設計】Socket Api函式Linux程式設計API函式
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- 網路程式設計之socket程式設計
- python:socket網路程式設計Python程式設計
- SOCKET程式設計程式設計
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議
- 網路程式設計-Socket通訊程式設計
- 【網路程式設計】socket詳解程式設計
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- Java Socket程式設計Java程式設計
- socket程式設計(1)程式設計
- Socket程式設計模型程式設計模型
- Python socket程式設計Python程式設計
- Java 網路程式設計 —— Socket 詳解Java程式設計
- go socket、http網路程式設計demoGoHTTP程式設計
- Socket程式設計基礎程式設計
- socket程式設計實戰程式設計
- Socket:UDP協議小白UDP協議
- .NET TCP、UDP、Socket、WebSocketTCPUDPWeb
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- Liunx C 程式設計之多執行緒與Socket程式設計執行緒
- linux非阻塞式socket程式設計之select()用法Linux程式設計
- python資源庫——socket網路程式設計Python程式設計
- socket程式設計實現tcp伺服器_C/C++程式設計TCP伺服器C++
- 【socket程式設計基礎模板】程式設計
- select函式socket程式設計函式程式設計