2009-06-22 01:01:46 坚持!
cc -o client daytimetcpcli.c
编译程序通过后,生成一个client应用程序后,运行./client 206.168.112.96
等待了75秒后屏幕输出Connection timed out
后来问了同学才知道是时间服务器关了。
端口号13是系统定义的时间服务用的特定端口号。
也就是说这个程序如果连别的机器没有开时间服务的,就会返回connected refuse
将程序中的13 端口号换成50000,然后在daytimesrv.c的端口号也换成50000.然后重新编译。
将srv程序拷到另一台机器上,先运行,然后在本机行运行./client程序。成功
下面是为了这个程序查找的一些信息
获取错误信息函数
extern int errno;
#include <errno.h>
char *strerror(int errnum);
返回:errnum 对应的错误信息地址。
connect函数
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *servaddr, socklen_addrlen);
返回: 0-----成功,-1-------出错
1. 套接口地址结构
IPV4地址套接口:
struct sockaddr_in
2. 字节排序函数
#include <netinet/in.h>
uint16_t htons(uint16_t host16bitvalue);
uint32_t htonl(uint32_t host32bitvalue);
均返回:网络字节序值
uint16_t ntohs(uint16_t net16bitvalue);
uint32_t ntohl(uint32_t net32bitvalue);
均返回:主机字节序值
3. 字节操作函数
#include <strings.h>
voide bzero(void *dest, size_t nbytes);
voide bcopy(const void *src, void *dest, size_t nbytes);
int vcmp(const void *ptr1, const void *ptr2, size_t nbytes);
返回:0------相等, 非0--------不相等
ANSI C 函数
#include <string.h>
void *memset(void *dest, int c, size_t len);
void *memcopy(void *dest, const void *src, size_t nbytes);
int memcmp(const void * ptr1, const void *ptr2, size_t nbytes);
返回: 0-----相同,>0 或 < 0 -----不相同
4. IPV4地址转换函数(ASCII 字符串 与 网络字节序 的 二进制值间转换)
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
返回:1------串有效, 0---------串有错
int inet_addr(const char *strptr);
返回:若成功,返回32位二进制的网络字节序地址; 若有错,则返回INADDR_NONE
char *inet_ntoa(struct in_addr inaddr);
返回:指向点分十进制数串的指针
5.IPV4和IPV6都能处理的地址转换函数
字母p(presentation)表达式ASCII码串,n(numeric)数值格式网络字节序二进制格式
#include <arpa/inet.h>
int inet_pton(int family, const char *strptr, void *addrptr);
返回: 1-----成功,0-----输入不是有效的表达式,-1-----出错
const char *inet_ntop(int family, const void *addrptr, char *strptr, size_t len);
返回: 指向结果的指针-----成功,NULL----出错