一个新手,CS架构,C语言问题,望解答
这是这个书上的简单C/S程序,见下面。
gcc -o sever server.c
gcc -o client client.c
运行是
./server
另外一个控制台运行
./client 127.0.0.1
原本在客户机输入字符可以返回几个字节altogether,但是现在随便输入什么并不返回,我是新手,望高手帮忙调试下,找找问题,或者给点思路,谢谢!(我的环境死活Fedora+GCC)
服务端
#include <arpa/inet.h> //防止错误#include <netinet/in.h>//防止错误#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>//#include <Linux/in.h>#define PORT 8888#define BACKLOG 2int main(int argc, char *argv[]) { int ss, sc; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int err; pid_t pid; ss = socket(AF_INET, SOCK_STREAM, 0); if (ss < 0) { printf("Socket error \n"); return -1; } else { printf("Socket OK!\n"); } bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); err = bind(ss, (struct sockaddr*) &server_addr, sizeof(server_addr)); if (err < 0) { printf("Bind Error\n"); } else { printf("Bind OK!\n"); } err = listen(ss, BACKLOG); if (err < 0) { printf("Listen Error\n"); } else { printf("Listen OK! \n"); } for(;;) { int addrlen=sizeof(struct sockaddr); sc=accept(ss,(struct sockaddr*)&client_addr,&addrlen); if (sc<0){ continue; } pid=fork(); if (pid==0) { close(ss); process_conn_server(sc); } else { close(sc); } } return 0;}void process_conn_server(int s){ ssize_t size=0; char buffer[1024]; for (;;) size=read(s,buffer,1024); if (size==0){ return ; } sprintf(buffer,"%d bytes altogether \n",size); write(s,buffer,strlen(buffer)+1);}
#include <arpa/inet.h> //防止错误#include <netinet/in.h>//防止错误#include <strings.h>#include <sys/types.h>#include <sys/socket.h>#include <unistd.h>#include <stdio.h>#include <stdlib.h>#define PORT 8888int main(int argc, char *argv[]) { int s; struct sockaddr_in server_addr; int err; s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) { printf("socket error"); }else{ printf("socket OK!"); } bzero(&server_addr, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl(INADDR_ANY); server_addr.sin_port = htons(PORT); inet_pton(AF_INET, argv[1], &server_addr.sin_addr); connect(s, (struct sockaddr*) &server_addr, sizeof(struct sockaddr)); process_conn_client(s); return 0;}void process_conn_client(int s) { ssize_t size = 0; char buffer[1024]; for (;;) { size = read(0, buffer, 1024); if (size > 0) { write(s, buffer, size); size = read(s, buffer, 1024); write(1, buffer, size); } }}
// server.cvoid process_conn_server(int s){ ssize_t size=0; char buffer[1024]; for (;;) size=read(s,buffer,1024); // 这里是个死循环,把这句及其以后都加到foo循环中 if (size==0){ return ; } sprintf(buffer,"%d bytes altogether \n",size); write(s,buffer,strlen(buffer)+1);}