- 论坛徽章:
- 0
|
这是这个书上的简单C/S程序,见下面。
gcc -o sever server.c
gcc -o client client.c
运行是
./server
另外一个控制台运行
./client 127.0.0.1
原本在客户机输入字符可以返回几个字节altogether,但是现在随便输入什么并不返回,我是新手,望高手帮忙调试下,找找问题,或者给点思路,谢谢!
服务端- #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 2
- int 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 8888
- int 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);
- }
- }
- }
复制代码 |
|