linux简单echo服务器,linux socke编程实例:一个简单的echo服务器程序

#include #define EHCO_PORT 8080

#define MAX_CLIENT_NUM 10

int main()

{

int socketfd;

socketfd = socket(AF_INET, SOCK_STREAM, 0);

if(socketfd == -1)

{

printf("errno=%d ", errno);

exit(1);

}

else

{

printf("socket create successfully ");

}

struct sockaddr_in sa;

bzero(&sa, sizeof(sa));

sa.sin_family = AF_INET;

sa.sin_port = htons(EHCO_PORT);

sa.sin_addr.s_addr = htons(INADDR_ANY);

bzero(&(sa.sin_zero), 8);

if(bind(socketfd, (struct sockaddr *)&sa, sizeof(sa))!= 0)

{

printf("bind failed ");

printf("errno=%d ", errno);

exit(1);

}

else

{

printf("bind successfully ");

}

//listen

if(listen(socketfd ,MAX_CLIENT_NUM) != 0)

{

printf("listen error ");

exit(1);

}

else

{

printf("listen successfully ");

}

int clientfd;

struct sockaddr_in clientAdd;

char buff[101];

socklen_t len = sizeof(clientAdd);

int closing =0;

while( closing == 0 && (clientfd = accept(socketfd, (struct sockaddr *)&clientAdd, &len)) >0 )

{

int n;

while((n = recv(clientfd,buff, 100,0 )) > 0)

{

printf("number of receive bytes = %d ", n);

write(STDOUT_FILENO, buff, n);

send(clientfd, buff, n, 0);

buff[n] = '';

if(strcmp(buff, "quit ") == 0)

{

break;

}

else if(strcmp(buff, "close ") == 0)

{

//server closing

closing = 1;

printf("server is closing ");

break;

}

}

close(clientfd);

}

close(socketfd);

return 0;

}

经过cc编译后,即可运行。在这里我们写的程序是服务器程序,要想完成通信,也得写一个客户端程吧???

呵呵,我们先把客户端的程序放下来,先测测我们服务器程序吧。在这里,我们使用 telnet充当客户端进行测试,telnet可以说是一个很好的客户端程序。呵呵:

本机IP为192.168.0.69,整个通信过程如下:

linyongting@linyongting:~$ telnet 192.168.0.69 8080

Trying 192.168.0.69...

Connected to 192.168.0.69.

Escape character is '^]'.

hello! This is my first packet.Can you reply to me?

hello! This is my first packet.Can you reply to me?

Ohh, U did it!

Ohh, U did it!

see U next time!!!

see U next time!!!

quit

quit

Connection closed by foreign host.

linyongting@linyongting:~$ telnet 192.168.0.69 8080

Trying 192.168.0.69...

Connected to 192.168.0.69.

Escape character is '^]'.

close

close

Connection closed by foreign host.

上面连接了两次,第一次时,与服务器通信3次,每次发信息过去后,都收到与发出来一模一样的信息。当用户输入quit的时候,服务端就会关闲与客户通信的socket,通信结束。第二次客户只输入close,服务器响应后马上关闭服务器,同时也关闭客户端。下面是服务器的显示内容:

linyongting@linyongting:~/program/c$ ./echoServer

socket create successfully

bind successfully

listen successfully

//第一次通信

number of receive bytes = 53

hello! This is my first packet.Can you reply to me?

number of receive bytes = 16

Ohh, U did it!

number of receive bytes = 20

see U next time!!!

number of receive bytes = 6

quit

//第二次通信

number of receive bytes = 7

close

server is closing

当客户端输入quit时,只是客户端关闭,服务器还接着为其它客服端服务。当客户端输入 close时,服务关闭。

当前出现的问题:

我们的服务器序程只能与一个客户端进行通信,只能当客户端发出quit命令关闭后才能与下一个客户端通信。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值