1.socket原理
2.客户端与服务器端流程
3.tcp服务器通信步骤
1 创建套接字 socket
2 绑定 bind
3 监听 listen
4 提取 accept
5 读写 以下函数
6 关闭 close
4.部分代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <sts/socket.h>
#include <unstd.h>
int main(int argc,char *argv[]){
//1.创建套接字
int lfd=socket(AF_INET,SOCK_STREAM,0);
//2.绑定,即绑定ip:inet_pton和端口:sin_port
struct sockaddr_in addr;
addr.sin_family=AF_INET;
addr.sin_port=htons(...);//8xxx或者多少
//addr.sin_addr.s_addr=INADDR_ANY;//0赋给他,绑定通配地址
//不偷懒绑定固定一个
inet_pton(AF_INET,"192.168...",&addr.sin_addr.s_addr);//服务器id(虚拟器id)
int ret=bind(lfd,(struct sockaddr *)&addr,sizeof(addr));
//if(ret<0){
// perror("");
// return 0;
//}
//3.监听:决定开启的部门热线
listen(lfd,128)
//4.提取 套接字 返回新的文件描述符,和客户端通信的套接字(已连接套接字)
struct sockaddr_in cliaddr;
socklen_t len =sizeof(cliaddr);
//拨打电话
int cfd=accept(lfd,(struct sockaddr *)&cliaddr,&len);//客户端信息保存在加粗这
char ip[16]="";
printf("new client ip=%s port=%d\n",inet_ntop(AF_INET,&cliaddr.sin_addr.s_addr,ip,16),
ntohs(client.sin_port));//ip和端口
//5.读写
char buf[1024]="";
while(1){
//读键盘
//bzero(buf,sizeof(buf));
//int n=read(STDIN_FILENO,buf,sizeof(buf));
//write(cfd,buf,n);
//n=read(cfd,buf,sizeof(buf));
//服务器给客户端发送
write(cfd,"ashfs;nd;jdks",10);
read(cfd,buf,sizeof(buf));
printf("%s\n",buf);
}
//6.关闭
close(lfd);//不能监听新的链接
close(cfd);//与客户端通信断开
return 0;
}