C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例
Tcp多線程服務(wù)器和客戶端程序
服務(wù)器程序:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define PORT 8082 #define BUFSIZE 512 char buf[BUFSIZE+1]; void* fun(void* x) { //printf("enter thread!\r\n"); int new_fd=*((int*)x); while(1) { int z=read(new_fd,buf,BUFSIZE);//第 6 步 讀取套接字 if(z==0){printf("client close !");break;}; buf[z]='\0'; printf("%s\r\n",buf);//打印 }; } int newfd[512]; int inewfd=0; int main() { //第 1 步 創(chuàng)建套接字 int sockfd=socket(AF_INET,SOCK_STREAM,0); //第 2 步 設(shè)置地址結(jié)構(gòu)體 struct sockaddr_in svraddr; svraddr.sin_family=AF_INET;//使用 internet 協(xié)議 svraddr.sin_port=htons(PORT); inet_aton("0.0.0.0",&svraddr.sin_addr); //第 3 步 綁定 int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr)); if(ret<0){printf("error bind!\r\n");exit(-1);}; //第 4 步 監(jiān)聽 listen(sockfd,128); while(1) { newfd[inewfd++]=accept(sockfd,NULL,NULL); //第 5 步 接收 pthread_t ntid; pthread_create(&ntid,NULL,fun,(void*)&(newfd[inewfd-1])); } }
注意:
gcc server.c -o server -lpthread
客戶端程序 cli.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define PORT 8082 #define BUFSIZE 512 char buf[BUFSIZE+1]; int main() { //第 1 步 創(chuàng)建一個體套接字 int sockfd=socket(AF_INET,SOCK_STREAM,0); //第 2 步 設(shè)置 addr 結(jié)構(gòu)體 struct sockaddr_in svraddr; svraddr.sin_family=AF_INET;//使用 internet 協(xié)議 svraddr.sin_port=htons(PORT); inet_aton("127.0.0.1",&svraddr.sin_addr); //第 3 步 連接服務(wù)器 connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr)); while(1) { scanf("%s",buf); write(sockfd,buf,strlen(buf)); //第 4 步 向套接字中寫入字符串 } }
Udp的服務(wù)器程序和客戶端程序
服務(wù)器程序:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define PORT 8082 #define BUFSIZE 512 char buf[BUFSIZE+1]; int main() { //第 1 步 創(chuàng)建套接字 int sockfd=socket(AF_INET,SOCK_DGRAM,0); //第 2 步 設(shè)置地址結(jié)構(gòu)體 struct sockaddr_in svraddr; svraddr.sin_family=AF_INET;//使用 internet 協(xié)議 svraddr.sin_port=htons(PORT); inet_aton("0.0.0.0",&svraddr.sin_addr); //第 3 步 綁定 int ret=bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr)); if(ret<0){printf("cannot bind!\r\n");exit(-1);}; while(1) { struct sockaddr_in cli; int len=sizeof(cli); int z=recvfrom(sockfd,buf,BUFSIZE,0,(struct sockaddr*)&cli,&len);//第 6 步 讀取套接字 buf[z]='\0'; printf("%s\r\n",buf);//打印 } }
客戶端程序 cli.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #define PORT 8082 #define BUFSIZE 512 char buf[BUFSIZE+1]; int main() { //第 1 步 創(chuàng)建一個體套接字 int sockfd=socket(AF_INET,SOCK_DGRAM,0); //第 2 步 設(shè)置 addr 結(jié)構(gòu)體 struct sockaddr_in svraddr; svraddr.sin_family=AF_INET;//使用 internet 協(xié)議 svraddr.sin_port=htons(PORT); inet_aton("127.0.0.1",&svraddr.sin_addr); //第 3 步 連接服務(wù)器 //connect(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr)); while(1) { scanf("%s",buf); sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&svraddr,sizeof(svraddr)); //第 4 步 向套接字中寫入字符串 } }
上一篇:編寫C++程序使DirectShow進(jìn)行視頻捕捉
欄 目:C語言
下一篇:C++中實(shí)現(xiàn)隊(duì)列類鏈?zhǔn)酱鎯εc棧類鏈?zhǔn)酱鎯Φ拇a示例
本文標(biāo)題:C語言編寫基于TCP和UDP協(xié)議的Socket通信程序示例
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2432.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)式函數(shù)庫
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對數(shù)怎么表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段函數(shù)
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排序法函數(shù)
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段函數(shù)
- 04-02C語言中怎么打出三角函數(shù) c語言中怎么打出三角函數(shù)的值
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求階乘


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 04-02jquery與jsp,用jquery
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文