实现网络Socket客户端
程序员文章站
2022-05-18 14:57:34
...
1.客户端编程流程
2.客户端编程–具体实现
客户端编程思路:
1.socket(); 创建套接字
2.connect();发送连接请求
3.write(); read();连接后,进行通信
4.close();释放套接字
/*********************************************************************************
* Copyright: (C) 2018 NULL
* All rights reserved.
*
* Filename: socket_server.c
* Description: This file
*
* Version: 1.0.0(2018年08月04日)
* Author: DingHuanhuan <aaa@qq.com>
* ChangeLog: 1, Release initial version on "2018年08月04日 19时18分17秒"
*
********************************************************************************/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
/* sockaddr_in{} and other Internet define */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
/* strerror(),perror(), errno head file */
#include <errno.h>
#define BUF_SIZE 1024
#define Serv_IP "192.168.2.2"
#define port 12345
int main(char argc, char **argv)
{
int sockfd = -1; //创建一个套接字
struct sockaddr_in serv_addr;//定义网络通信通用兼容的IPV4/IPV6结构体
char buf[BUF_SIZE]; //定义缓冲区
sockfd = socket(AF_INET,SOCK_STREAM,0);//创建一个套接字,IPV4面向TCP连接
if(sockfd < 0) //若创建套接字出错
{
printf("creat socket failure:%s\n",strerror(errno));
return -1;
}
printf("socket create fd is %d \n",sockfd); //打印套接字的文件描述符
/* 连接服务器的准备,设置要连接的服务器的IP地址和端口号 */
memset(&serv_addr,0,sizeof(serv_addr));//清空处理网络通信的地址的结构体
serv_addr.sin_family = AF_INET; //设置为IPV4地址
serv_addr.sin_port = htons(port); //端口号,主机字节序转网络字节序
inet_aton(Serv_IP,&serv_addr.sin_addr);//把字符串IP地址转换为一个32位网络序列IP地址
printf ("设置 IP地址端口号成功\n");
/* 连接服务端 */
if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr))<0)
{
printf("connect to the server failure:%s\n",strerror(errno));
return -2;
}
while(1)
{
memset(buf, 0, BUF_SIZE);
printf("start to recv\n");
if(recv(sockfd, buf ,BUF_SIZE,0)<0)
{
printf ("recv failure :%s\n",strerror(errno));
return -4;
}
printf ("recv %s from the server\n",buf);
sleep(2);
if(send(sockfd,"Hello!\n",strlen("Hello!\n"),0)<0)
{
printf ("send failure :%s\n",strerror(errno));
return -3;
}
printf ("send is ok\n");
sleep(2);
}
close(sockfd);
return 0;
}
上一篇: 『消息中间件』RocketMQ部署
下一篇: 有关原生开发的文章推荐8篇