PHP can open a socket port on a remote or local host. This article is a small example of using a socket: Connect to a Usenet newsgroup server, talk to the server, and download some articles from the newsgroup.
Open a socket in PHP Use Fsockopen () to open a socket. This function can be used in both PHP3 and PHP4. The function declaration is this:
int Fsockopen (string hostname, int port _ [, int errno [, String errstr [, double timeout]]]
This function will open a TCP connection to the port of the host hostname. The hostname can be a valid domain name, or an IP address. For UDP connections, you must specify the protocol: Udp://hostname. For UNIX domains, the host name uses the path to the socket, in which case port ports must be set to 0. The optional timeout parameter is used to set the time, in seconds, to wait for the opening of a socket.
For more information about Fsockopen (), please refer to: http://www.php.net/manual/function.fsockopen.php
Network News Transfer Protocol Accessing a newsgroup server requires a protocol called NNTP (Network News Transfer Protocol). This protocol has detailed details in the rfc977, which can be obtained in http://www.w3.org/PRotocols/rfc977/rfc977.html. This document describes how to connect to the NNTP server, how to talk to the server, and the different commands for accomplishing these tasks.
Connection Connecting to an NNTP server requires knowing its hostname (or IP address) and the port it listens to. To avoid a connection attempt failure that causes the program to hang, you should use the timeout parameter. $cfgServer = "Your.news.host"; $cfgPort = 119; $cfgTimeOut = 10;
Open a socket if (! $cfgTimeOut) Without timeout $usenet _handle = Fsockopen ($cfgServer, $cfgPort); Else With timeout $usenet _handle = Fsockopen ($cfgServer, $cfgPort, & $errno, & $errstr, $cfgTimeOut);
Now that we have connected to the server, we can talk to the server through the socket that was opened earlier. Let's say we're going to get the latest 10 articles from a news group. RFC977 points out that the first step is to select the correct newsgroup with the group command: GROUP GGG The parameter GGG is the name of the newsgroup to select (for example, "Net.news"), which is required. A list of available newsgroups can be obtained by using the List command. When you select a newsgroup command successfully, returns the article number for the first and last article in the group, and the number of articles in the group.
Here is an example: chrome:~$ Telnet My.news.host 119 Trying aa.bb.cc.dd ... Connected to My.news.host. Escape character is ' ^] '. My.news.host internetnews NNRP Server INN 2.2.2 13-dec-1999 ready (posting OK). GROUP Alt.test 211 232 222996 223235 Alt.test Quit 205.
After receiving the command GROUP alt.test, the server returns "211 232 222996 223235 alt.test". 211 is the return code defined in the RFC indicating that the command was executed successfully. The return information also points out that there are now 232 articles, the oldest article is numbered 222996, and the latest article is numbered 223235. We see that 222996+232 is not equal to 223235. The 7 lost articles were removed from the server for some reason, possibly because it was canceled by its rightful author (which is possible and easy to do), or was deleted because it was an article of irrigation.
It is important to note that some servers may require authentication before selecting newsgroups, depending on whether it is a public or private server. It is also possible that the server allows anyone to read the article, but publishing an article requires authentication.
The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion;
products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the
content of the page makes you feel confusing, please write us an email, we will handle the problem
within 5 days after receiving your email.
If you find any instances of plagiarism from the community, please send an email to:
info-contact@alibabacloud.com
and provide relevant evidence. A staff member will contact you within 5 working days.