基于c语言客户端的步骤,如何用C语言写一个基于服务器和客户端(TCP)

/*服务器*/

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

int main()

{

int sockfd = socket(AF_INET, SOCK_STREAM, 0);//创建套接字

if (sockfd 

{

perror("socket");

return -1;

} //创建失败的错误处理

printf("socket..............\n"); //成功则打印“socket。。。。”

struct sockaddr_in myaddr; //创建“我的地址”结构体

memset(&myaddr, 0, sizeof(myaddr)); //对内存清零(保险起见)

myaddr.sin_family       = AF_INET; //选择IPV4地址类型

myaddr.sin_port         = htons(8888); //选择端口号

myaddr.sin_addr.s_addr  = inet_addr("192.168.3.169"); //选择IP地址

if (0 > bind(sockfd, (struct sockaddr*)&myaddr, sizeof(myaddr)))//绑定套接字

{

perror("bind");

return -1;

}

printf("bind..........\n");

if (0 > listen(sockfd, 8))//调用listen对指定端口进行监听

{

perror("listen");

return -1;

}

printf("listen............\n");

int connfd = accept(sockfd, NULL, NULL);//使用accept从消息队列中获取请求

if (connfd 

{

perror("accept");

return -1;

}

printf("accept..............\n");

char buf[100];//定义一个数组用来存储接收到的数据

int ret;

while (1)

{

memset(buf, 0, sizeof(buf));

ret = read(connfd, buf, sizeof(buf));

if (0 > ret)

{

perror("read");

break;

}//执行while循环读取数据,当

else if (0 == ret)

{

printf("write close!\n");

break;

}

printf("recv: ");

fputs(buf, stdout);//打印接收到的数据

}

close(sockfd);//关闭套接字

close(connfd);//断开连接

return 0;

}

/*客户端*/(具体功能和服务器一样,所以不再加注释)

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

int main()

{

int sockfd;

if (0 > (sockfd = socket(AF_INET, SOCK_STREAM, 0)))

{

perror("socket");

return -1;

}

printf("socket...........\n");

struct sockaddr_in srv_addr;

memset(&srv_addr, 0, sizeof(srv_addr));

srv_addr.sin_family         = AF_INET;

srv_addr.sin_port           = htons(8888);

srv_addr.sin_addr.s_addr    = inet_addr("192.168.3.169");

if (0 > connect(sockfd, (struct sockaddr*)&srv_addr, sizeof(srv_addr)))

{

perror("connect");

return -1; //exit //pthread_exit

}

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

char buf[100];

int ret;

while (1)

{

printf("send: ");

fgets(buf, sizeof(buf), stdin);

ret = write(sockfd, buf, sizeof(buf));

if (ret 

{

perror("write");

break;

}

if (strncmp(buf, "quit", 4) == 0)

break;

}

close(sockfd);

return 0;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值