Recently began to learn UNIX network programming, the opening of the first program DAYTIMETCPCLI.C compiled run successfully, it took a lot of thought, the problem is summed up for your reference.
FreeBSD UNIX System built VMware virtual machine, before the FreeBSD is also small white, although also played Linux, the network communication these settings ah or not familiar.
The source code of the book is as follows:
#include ".. /lib/unp.h "
#include ".. /lib/error.c "
Int
Main (int argc, char **argv)
{
Int SOCKFD, N;
Char Recvline[maxline + 1];
struct SOCKADDR_INSERVADDR;
if (argc! = 2)
Err_quit ("Usage:a.out <IPaddress>");
if ((SOCKFD = socket (af_inet, sock_stream, 0)) < 0)
Err_sys ("socket error");
Bzero (&servaddr, sizeof (SERVADDR));
servaddr.sin_family = af_inet;
Servaddr.sin_port =htons (+);/* Daytime Server */
if (Inet_pton (Af_inet, argv[1], &servaddr.sin_addr) <= 0)
Err_quit ("Inet_pton error for%s", argv[1]);
if (Connect (SOCKFD, (SA *) &servaddr, sizeof (SERVADDR)) < 0)
Err_sys ("Connect error");
while ((n = Read (SOCKFD, Recvline, MAXLINE)) > 0) {
Recvline[n] = 0;/* NULL Terminate */
if (fputs (recvline, stdout) = = EOF)
Err_sys ("fputs error");
}
if (n < 0)
Err_sys ("read error");
Exit (0);
}
After the successful installation of FREEBSD, Telnet and FTP services, to open themselves, in the /etc/inetd.conf, with the EE command to open, can be directly edited,
To save must be with root permission, ESC after AA is saved. Ps-ef | grep inetd View PID number, after kill, with INETD-WW heavy
New, new settings take effect.
Editing is actually removing the "#" comment for the corresponding line.
#ftp Stream TCP nowait root/usr/libexec/ftpd ftpd-l
#ftp stream TCP6 nowait root/usr/libexec/ftpd ftpd-l
#telnet Stream TCP nowait root/usr/libexec/telnetd telnetd
#telnet stream TCP6 nowait root/usr/libexec/telnetd telnetd
Anyway, cc DAYTIMETCPCLI.C, Generate A.out, run./a.out 127.0.0.1
Always prompt for connect error:connection refused.
Use Sockstat to view the ports that the server is running on, with 21,23 these common ports.
Baidu said should not open daytime service port. Look at the FreeBSD manual, which says these services are built by default boot.
Then go back to the network programming book, look at the code behind the explanation, know that connect failed to execute, and then analyze the key points in
Htons (13) This function,
13 is the service port number, change 13 to the other port to see, and then change to 21, found that execution success.
Although the execution succeeds, but is not the book daytime string, the heart still has some regrets. At least we can prove it.
The server does not have a problem, it should be configured and some are not set correctly. Continue Baidu.
Then read the explanation of the daytime protocol in the Kiwi Encyclopedia:
The Daytime protocol ( English:Daytime Protocol) is a network transport protocol defined within RFC 867.
The host can connect to a server that supports the daytime protocol with TCP or UDP port 13.
The server returns the date and time in ASCII characters. Format similar: day, month, year time zone.
It is also used to test the connectivity of the computer network, and now the method of testing the network has been switched to ping or traceroute.
Daytime protocol on inetd
In Linux, FreeBSD, or other Unix-like operating systems, the daytime time server is built into the inetd. Typically the daytime protocol service is turned off by default, or the following data is added to the /etc/inetd.conf file to open the service:
Daytime stream tcp nowait root internaldaytime stream tcp6 nowait Root internaldaytime dgram udp wait root internaldaytime dgram udp6 Wait root internal
Read the above explanation, then the daytime service opened, restart inetd, all OK
See inetd.conf inside there are a lot of lines in the beginning, should be a lot of services must be manually opened.
The first example in the book is the perfect execution, the beginning of which makes people happy. Little white, keep moving.
<<unix Network Programming >> Source compilation DAYTIMETCPCLI.C Problem Summary