只是想记录,以后可以复制粘贴仅此而已.
C语言代码:
#include <stdio.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <strings.h>
int socket_init(const char *hostname, int port)
{
int sockfd = -1;
int error = -1;
struct hostent *host;
struct sockaddr_in server;
if (hostname == NULL){
printf("[%s][%s][%d] hostname is null!\n", __FILE__, __func__, __LINE__);
goto error;
}
host = gethostbyname(hostname);
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1){
printf("[%s][%s][%d] socket failed!\n", __FILE__, __func__, __LINE__);
sockfd = -1;
} else {
server.sin_family = AF_INET;
server.sin_port = htons(port);
server.sin_addr = *((struct in_addr *) host->h_addr);
bzero(&(server.sin_zero), 8);
error = connect(sockfd, (struct sockaddr *) &server,
sizeof(struct sockaddr));
if (error == -1){
printf("[%s][%s][%d] socket failed!\n", __FILE__, __func__, __LINE__);
sockfd = -1;
}
}
return sockfd;
error:
return -1;
}
获取时间的客户端例子, 获取时间的服务器默认端口是13
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#define MAXLINE 1024
int main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE + 1];
struct sockaddr_in servaddr;
if (argc != 2){
fprintf(stderr, "usage: a.out <IPaddress>\n");
goto error;
}
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
fprintf(stderr, "socket error\n");
goto error;
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13); // daytime server
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){
fprintf(stderr, "inet_pton error for %s\n", argv[1]);
goto error;
}
if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0){
fprintf(stderr, "connect error\n");
goto error;
}
while ( (n = read(sockfd, recvline, MAXLINE)) > 0){
recvline[n] = 0; // null terminate
if (fputs(recvline, stdout) == EOF){
fprintf(stderr, "fputs error\n");
goto error;
}
}
if (n < 0){
fprintf(stderr, "read error\n");
}
error:
exit(0);
}