以前写过一个shell命令解释器,对与shell命令解释器的执行流程有了清晰的认识,这段时间学习网络编程,至于网络编程的细节以及知识点,已经在上一遍博客中,转载了从网上摘的文章,基本概括了网络编程的主要api,而对于程序员,更重要的是解决实际问题的能力,所以练习是非常重要的,现在,我们在一起shell命令解释器的基础上,写一个基于socket网络编程的网络版shell命令解释器,也可以称之为telnet服务端。
telnet服务端代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/socket.h> #include "my_type.h" //外部头文件 申明了一个函数体 exec_cmd() int main(void) {
char buf[2048];//为了保持程序简短,便于阅读,省去了错误判断。 int socket_fd; struct sockaddr_in netaddr; unsigned short int port=8000; socket_fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); bzero(buf,2048); bzero(&netaddr,sizeof(struct sockaddr_in));//为了保持程序简短,便于阅读,省去了错误判断。 netaddr.sin_family=AF_INET; netaddr.sin_port=htons(port); netaddr.sin_addr.s_addr=htonl(INADDR_ANY); bind(socket_fd,(struct sockaddr *)&netaddr,sizeof(struct sockaddr));//在实际代码中,已加入了错误判断 listen(socket_fd,3); while(1) {
int connfd; int i=0; char ch=0; char os_chose[4]; int len=sizeof(struct sockaddr); struct sockaddr_in cliaddr; char buf_in[2048]; bzero(os_chose,4); bzero(&cliaddr,sizeof(struct sockaddr_in)); printf("port = %d \n",ntohs(netaddr.sin_port)); start: connfd=accept(socket_fd,(struct sockaddr *)&cliaddr,&len);//监听端口 等待客户端连接 printf(" accept is over, remote ip = \n "); while(1) {
strcpy(buf," chose your system : \r\n"); write(connfd,buf,30); strcpy(buf,"\r [1] windons \n"); write(connf
|