linux中怎么测试i o,linux下的阻塞I/O模型测试

本文展示了如何使用C语言实现一个简单的TCP/IP通信系统,包括客户端和服务器端的代码实现。客户端通过socket创建连接,向服务器发送数据;服务器端监听连接,接收并打印客户端发送的数据。这是一个基础的网络编程示例。
摘要由CSDN通过智能技术生成

客户端 #include

#include

#include

#include

#include

#include

#include

#include

#define ServerIP "192.168.43.8"

#define ServerPort 27015

int main()

{

int ret;

char sendbuf[128];

bzero(sendbuf,sizeof(sendbuf));

struct sockaddr_in addrServer;

bzero(&addrServer,sizeof(addrServer));

addrServer.sin_family = AF_INET;

addrServer.sin_port = htons(ServerPort);

inet_pton(AF_INET,ServerIP,&addrServer.sin_addr.s_addr);

//创建socket

int clientfd = socket(AF_INET,SOCK_STREAM,0);

if(clientfd ==-1){

printf("socket error\n");

return -1;

}

//发起连接请求

ret = connect(clientfd,(struct sockaddr*)&addrServer,sizeof(addrServer));

if(ret == -1){

printf("connect error\n");

close(clientfd);

return -1;

}

printf("connect successful.....\n");

printf("Please input sendbuf:");

scanf("%s",sendbuf);

//发送数据

ret = send(clientfd,sendbuf,sizeof(sendbuf),0);

if(ret > 0){

printf("host send:%s\n",sendbuf);

}

close(clientfd);

return 0;

} 服务器端 #include

#include

#include

#include

#include

#include

#include

#define DEF_PORT 27015

int main()

{

int res;

char recvbuf[1024];

char ip[16];

bzero(recvbuf,sizeof(recvbuf));

bzero(ip,sizeof(ip));

struct sockaddr_in addrServer;

bzero(&addrServer,sizeof(addrServer));

addrServer.sin_family = AF_INET;

addrServer.sin_port = htons(DEF_PORT);

addrServer.sin_addr.s_addr = htonl(INADDR_ANY);

//创建socket

int serverfd = socket(AF_INET,SOCK_STREAM,0);

if(serverfd == -1)

{

printf("socket error\n");

return -1;

}

//绑定

res = bind(serverfd,(struct sockaddr*)&addrServer,sizeof(addrServer));

if(res == -1){

printf("bind error\n");

close(serverfd);

return -1;

}

//监听连接

res = listen(serverfd,128);

if(res == -1){

printf("listen error\n");

close(serverfd);

return -1;

}

printf("Tcp server is running...\n");

struct sockaddr_in addrClient;

bzero(&addrClient,sizeof(addrClient));

int addrClient_size = sizeof(addrClient);

int recvlen = sizeof(recvbuf);

int clientfd;

while(1){

//等到客户端建立连接

clientfd = accept(serverfd,(struct sockaddr*)&addrClient,&addrClient_size);

if(clientfd == -1){

printf("accept error\n");

close(serverfd);

return -1;

}

printf("Connect client ip is:%s\n",inet_ntop(AF_INET,&addrClient.sin_addr.s_addr,ip,16));

printf("Connect cient port is: %d\n",ntohs(addrClient.sin_port));

while(1){

bzero(recvbuf,sizeof(recvbuf));

res = recv(clientfd,recvbuf,sizeof(recvbuf),0);

if(res > 0)

{

printf("data is:%s\n",recvbuf);

continue;

}

else if(res == 0){

printf("client normal closed..\n");

close(clientfd);

break;

}else{

printf("recv error\n");

close(clientfd);

close(serverfd);

}

}

}

close(clientfd);

close(serverfd);

return 0;

} 测试结果

c2fabc57eddfe053d740368755c6ef6c.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值