C语言TCP客户端获取时间

本文档详细介绍了使用Unix网络编程API创建TCP客户端的过程,包括所需的头文件、套接字结构、错误处理函数及实际代码示例。在代码中,作者展示了如何初始化套接字、设置服务器地址、发起连接以及处理读取和写入数据时可能出现的错误。通过运行示例,分析了不同错误情况,如连接被拒绝、超时和目的主机未响应,帮助读者理解网络通信中的常见问题。
摘要由CSDN通过智能技术生成

一 前言

学习Unix网络编程快要20天,由于一直在忙各种事情,再加上网络理论比较多,一直缺乏对代码的实践。

往期回顾 Unix网络编程卷一第三章笔记

二 socket相关的头文件

先整理一下代码需要用到的头文件
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>

sys/socket.hnetinet/in.h
struct sockaddrstruct sockaddr_in
int socket (int family ,int type ,int protocol)unistd.h
int connect (int sockfd , const struct sockaddr *servaddr , socklen_t addrlen)ssize_t read(int fd, void *buf, size_t count)

#include<strings.h>
#include <arpa/inet.h>

strings.h<arpa/inet.h>
void bzro(void *dest,size_t nbytes)int inet_aton( const *strptr, struct in_addr *addrptr)

三 代码


#include <stdio.h>
#include <stdlib.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include<strings.h>
#include <arpa/inet.h>

#include <unistd.h>

#define MAX_LINE 1024

void send_error(char *error);
int main ( int argc,char **argv) {

	int sockfd;//套接字描述符

	int message_length=0;

	char message[MAX_LINE];
	//定义一个套接字结构(IPV4)
	struct sockaddr_in servaddr;


	if(argc !=2) {
		printf("argc :%d\n",argc);
		exit(0);
	}

	if( (sockfd = socket(AF_INET,SOCK_STREAM,0)) <0) {
		perror("socket fault");
	}

	//初始化套接字结构,TCP协议,server IP and port
	bzero(&servaddr,sizeof(servaddr));//清0操作

	servaddr.sin_family = AF_INET;
	servaddr.sin_port = htons(13);//port
	//IP
	if( inet_pton(AF_INET,argv[1],&servaddr.sin_addr) <= 0){
		send_error("inet_pton error");
	}

	//客户端发起连接,struct sockaddr *通用套接字结构
	if ( connect(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) < 0) {
		send_error("connetc error");
	}


	while ( (message_length = read(sockfd,message,1024))>0)	{
		message[message_length] = '\0';

		if( fputs(message,stdout) == EOF) {
			send_error("fputs error");	
		}
	}

	if(message_length<0) send_error("read error");
	exit(0);//关闭所有描述符
}


void send_error(char *error){
	perror(error);
	exit(0);

}

四 运行

1.获取时间

gcc ClientGetTime.c 
./a.out 127.0.0.1
30 APR 2021 13:41:21 BST

2.向路由器发送TCP报文

./a.out 192.168.x.1
connetc error: Connection refused
  1. 仿造不存在的IP
./a.out 192.168.12.11
connetc error: Connection timed out

4.向已存在的主机发送请求

./a.out 192.168.x.x
connetc error: Connection timed out

5.分析结果


Connection refused:一般情况是由于对方的端口号没有开放
Connection timed out:目的主机没有响应TCP

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值