网站开发使用的工具网络营销方案的制定
TCP通信流程分析:
server 服务器端主要流程
socket(),创建socket套接字
bind(),绑定ip和端口
listen(),设置监听上限,不是用来监听的
accept(),阻塞客户端监听连接
用转换大小写字符串为例子
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <ctype.h>#define SERV_PORT 9527void sys_err(char* str)
{perror(str);exit(1);
}int main(int argc,char* argv[])
{int lfd = 0,cfd = 0;int ret_bind;int ret_listen;int ret_accept;int ret_read;char buf[BUFSIZ];socklen_t clit_addr_len;struct sockaddr_in serv_addr,clit_addr;serv_addr.sin_family = AF_INET;serv_addr.sin_port = htons(SERV_PORT);serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);lfd = socket(AF_INET,SOCK_STREAM,0);if(lfd == -1){sys_err("socket error");}ret_bind = bind(lfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr));if(ret_bind == -1){sys_err("bind error");}ret_listen = listen(lfd,128); //The default maximum value is 128clit_addr_len = sizeof(clit_addr);ret_accept = accept(lfd,(struct sockaddr*)&clit_addr,&clit_addr_len);if(ret_accept == -1){sys_err("accept error");}while(1){ret_read = read(ret_accept,buf,sizeof(buf));write(STDOUT_FILENO,buf,ret_read);for(int i = 0;i < ret_read;i++){buf[i] = toupper(buf[i]);}write(ret_accept,buf,ret_read);} close(lfd);close(ret_accept);return 0;
}
当程序运行时将在端口堵塞,如图下
此时打开另一个端口,用nc命令连接服务器,输入hello,会返回HELLO,如图