socket 网络 编程
網絡編程場景
自己是客戶端站在5棟樓前,自己要找到5棟樓中的一座并進入某一間房間,這時第二座樓上有人在用漢語(tcp/udp)說話,我的ip地址(樓號)是…,我的端口號(房間號)是…,就是先告訴你你的ip地址和端口號,確定你的服務器在哪里,然后回房間監聽(等待大家的來訪,來了敲門)
Socket服務器和客戶端的開發步驟
服務器開發
第一步
socket()獲得一個套接字,返回套接字的描述符,后面都是基于這個描述符向外面進行網絡訪問,這個作用有點像open()
第二步
bind()為套接字添加信息,將ip地址和端口號綁定到套接字。
第三步
listen()監聽網絡連接
第四步
accept()監聽到有客戶端接入的時候,接受一個連接。
第五步
數據交互(read從網絡通道上讀數據,write向網絡通道發數據)
第六步
關閉套接字,斷開連接。
客戶端開發
socket()給客戶端一個通道,知道IP地址和端口號調用connect()連接,然后客戶端write服務端read,服務端write客戶端read。
linux提供的API簡析
1、創建套接字時指定用哪種協議進行連接
2、地址準備好
地址轉換API
4、監聽
4、連接
數據收發
數據的收發第二套API
客戶端connect函數
字節序轉換API
查找結構體方法
-nir中 n表示顯示行號,i表示不區分大小寫,r表示逐行掃描
socket服務端代碼演示
#include<stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> //#include<linux/in.h> #include <arpa/inet.h> #include<stdlib.h> #include<netinet/in.h>int main() {int s_fd;int n_read;char readbuf[128];char*msg="I have get your messange";//1.sockets_fd=socket(AF_INET,SOCK_STREAM,0);//AF_INET表示IPV4因特網域,SOCK_STREAM表示TCP協議if(s_fd==-1){perror("socket");//打印錯誤exit(-1);}struct sockaddr_in s_addr;struct sockaddr_in c_addr;memset(&s_addr,0,sizeof(struct sockaddr_in));memset(&c_addr,0,sizeof(struct sockaddr_in));s_addr.sin_family=AF_INET;//IPV4因特網域s_addr.sin_port=htons(8988);//htons將字節序轉換為網絡字節序inet_aton("192.168.183.128",&s_addr.sin_addr);//sin_addr是ip地址//2.bindbind(s_fd,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));//3.listenlisten(s_fd,10);int clen=sizeof(struct sockaddr_in);//4.acceptint c_fd=accept(s_fd,(struct sockaddr *)&c_addr,&clen);//這里的c_fd就是接下來的操作對象,s_fd繼續等待其他客戶端的接入,accept的第二個參數是接入服務器者的信息if(c_fd==-1){perror("accept");}printf("get connect :%s\n",inet_ntoa(c_addr.sin_addr));//打印接入客戶端的IP地址//5.readn_read=read(c_fd,readbuf,128);if(n_read ==-1){perror("read");}else{printf("get message :%d,%s\n",n_read,readbuf);}//6.writewrite(c_fd,msg,strlen(msg));return 0; }socket客戶端代碼演示
#include<stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> //#include<linux/in.h> #include <arpa/inet.h> #include<stdlib.h> #include<netinet/in.h>int main() {int c_fd;int n_read;char* readbuf;readbuf=(char *)malloc(128);char*msg="message from client";//1.socketc_fd=socket(AF_INET,SOCK_STREAM,0);if(c_fd==-1){perror("socket");exit(-1);}struct sockaddr_in c_addr;memset(&c_addr,0,sizeof(struct sockaddr_in));c_addr.sin_family=AF_INET;c_addr.sin_port=htons(8988);inet_aton("192.168.183.128",&c_addr.sin_addr);//2.connectif(connect(c_fd,(struct sockaddr*)&c_addr,sizeof(struct sockaddr_in))==-1){perror("connect");exit(-1);}//3.sendwrite(c_fd,msg,strlen(msg));//4.readn_read=read(c_fd,readbuf,128);if(n_read ==-1){perror("read");}else{printf("get message from server:%d,%s\n",n_read,readbuf);}return 0; }總結
以上是生活随笔為你收集整理的socket 网络 编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#txt文本分割器
- 下一篇: 基于微信小程序的学习网站源码