read函数接收socket数据实例

本文介绍了一个使用read函数从客户端接收数据的简单示例。通过建立socket并监听指定端口,程序能够接受客户端连接,并读取发送过来的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节将讲解一个read函数读取数据的实例。在程序中,监听一个端口,如果有客户端连接这个端口则接受这个连接,然后用read函数读取远程主机发送的数据,输出这些数据以后结束这个程序。程序的代码如下所示。

代码17-6  read函数接收数据:/源文件/17/17.24.c

#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>         /*包含头文件。*/
#define PORT 6677         /*定义一个端口号。*/
main()
{
int sockfd,newsockfd,fd;       /*定义相关的变量。*/
struct sockaddr_in addr;
int addr_len = sizeof(struct sockaddr_in);
fd_set myreadfds;
char msgbuffer[256];
char msg[] ="This is the message from server.Connected./n";

if ((sockfd = socket(AF_INET,SOCK_STREAM,0))<0) /*建立一个socket。*/
{
perror("socket");
exit(1);
}
else
{
printf("socket created ./n");     /*socket建立成功。*/
printf("socked id: %d /n",sockfd);
}
   bzero(&addr,sizeof(addr));      /*清空zero所在的内存。*/
addr.sin_family =AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
   if(bind(sockfd,&addr,sizeof(addr))<0)    /*绑定IP端口。*/
{
perror("connect");
exit(1);
}
else
{
printf("connected./n");
printf("local port:%d/n",PORT) ;
}
   if(listen(sockfd,3)<0)        /*监听一个端口号。*/
{
perror("listen");
exit(1);
}
else
{
printf("listenning....../n"); 
}
   if((newsockfd = accept (sockfd,&addr,&addr_len))<0) /*接受一个连接。*/
{
perror("accept");
}
else             /*输出结果。*/
{
printf("cnnect from %s/n",inet_ntoa(addr.sin_addr));
if(read(newsockfd,msgbuffer,sizeof(msgbuffer))<=0)
          /*接收信息。*/
{
perror("accept");
}
else
{   
printf("message:/n%s /n",msgbuffer);   /*输出接收到的信息。*/
}
}
}


输入下面的命令,编译这个程序。

gcc 17.24.c

输入下面的命令,对这个程序添加可执行权限。

 chmod +x a.out

输入下面的命令,运行这个程序。

 ./a.out

程序的运行结果如下所示。结果表明这个程序正在监听本地计算机的6677号端口。

 socket created .
socked id: 3
connected.
local port:6677
listenning......

打开浏览器,在浏览器中输入下面的网址,然后按“Enter”键,使浏览器访问本地计算机的6677号端口。

 http://127.0.0.1:6677/

浏览器显示无法打开网页。在终端中显示了下面的代码,这些代码是浏览器向本机的6677号端口请求打开网页的数据报。

cnnect from 127.0.0.1
message:
GET / HTTP/1.1
Host: 127.0.0.1:6677
User-Agent: Mozilla/5.0 (X11; U; Linux i686;
zh-CN; rv:1.8.1.8) Gecko/20071030 Fedora/2.0.0.8-2.
fc8 Firefox/2.0.0.8
Accept: text/xml,application/xml,application/
xhtml+xml,text/html;q=0.9,text/ plain;q=0.8,image/png,*/*

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值