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語言網路程式設計:Poll Socket [code from GitHub, for study]LinuxC語言程式設計Github
- Linux Socket C語言網路程式設計:Epoll Socket [code from GitHub, for study]LinuxC語言程式設計Github
- C語言Socket程式設計(計算機網路作業)C語言程式設計計算機網路
- Linux Socket C語言網路程式設計:Pthread Socket [code from GitHub, for study]LinuxC語言程式設計threadGithub
- UDP協議網路Socket程式設計(java實現C/S通訊案例)UDP協議程式設計Java
- Socket 程式設計 (網路篇)程式設計
- Python網路Socket程式設計Python程式設計
- 基於UDP協議的Socket網路程式設計UDP協議程式設計
- linux Socket 程式設計Linux程式設計
- Go 語言使用.NET 包實現 Socket 網路程式設計Go程式設計
- (轉)Linux下 C++呼叫C 實現socket網路通訊程式設計LinuxC++程式設計
- socket udpUDP
- Socket網路程式設計程式設計
- 通過 Socket 實現 UDP 程式設計 入門UDP程式設計
- java Socket UdpJavaUDP
- 網路程式設計之socket程式設計
- SOCKET程式設計程式設計
- 【Linux網路程式設計】Socket Api函式Linux程式設計API函式
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- Linux Socket 程式設計簡介Linux程式設計
- linux socket程式設計初步(2)Linux程式設計
- VC環境下window網路程式:UDP Socket程式UDP
- C網路程式設計socket之connect函式程式設計函式
- python:socket網路程式設計Python程式設計
- Python Socket 網路程式設計Python程式設計
- 【網路程式設計】socket詳解程式設計
- 網路程式設計-Socket通訊程式設計
- HUST-計算機網路實驗-socket程式設計計算機網路程式設計
- java Socket Udp聊天JavaUDP
- socket程式設計(1)程式設計
- Java Socket程式設計Java程式設計
- Java Socket程式設計Java程式設計
- WCF、Socket程式設計程式設計
- Socket程式設計(九)程式設計
- Socket程式設計模型程式設計模型
- 基於TCP/UDP的Socket程式設計,HTTP/HTTPS協議TCPUDP程式設計HTTP協議