b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

c 16进制输出 c语言socket编程指南(8)

电脑杂谈  发布时间:2017-12-17 08:13:43  来源:网络整理

--------------------------------------------------------------------------------

connect()程序

现在我们假设你是个 telnet 程序。你的用户命令你得到套接字的文件 描述符。你听从命令调用了socket()。下一步,你的用户告诉你通过端口 23(标准 telnet 端口)连接到"132.241.5.10"。你该怎么做呢? 幸运的是,你正在阅读 connect()--如何连接到远程主机这一章。你可 不想让你的用户失望。

connect() 系统调用是这样的:

#include

#include

int connect(int sockfd, struct sockaddr *serv_addr, int addrlen);

sockfd 是系统调用 socket() 返回的套接字文件描述符。c 16进制输出serv_addr 是 保存着目的地端口和 IP 地址的数据结构 struct sockaddr。addrlen 设置 为 sizeof(struct sockaddr)。

想知道得更多吗?让我们来看个例子:

#include

#include

#include

#define DEST_IP "132.241.5.10"

#define DEST_PORT 23

main()

{

int sockfd;

struct sockaddr_in dest_addr; /* 目的地址*/

sockfd = socket(AF_INET, SOCK_STREAM, 0); /* 错误检查 */

dest_addr.sin_family = AF_INET; /* host byte order */

dest_addr.sin_port = htons(DEST_PORT); /* short, network byte order */

dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);

bzero(&(dest_addr.sin_zero),; /* zero the rest of the struct */

/* don't forget to error check the connect()! */

connect(sockfd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr));

.

.

.

再一次,你应该检查 connect() 的返回值--它在错误的时候返回-1,并 设置全局错误变量 errno。

同时,你可能看到,我没有调用 bind()。因为我不在乎本地的端口号。 我只关心我要去那。内核将为我选择一个合适的端口号,而我们所连接的 地方也自动地获得这些信息。一切都不用担心。

--------------------------------------------------------------------------------

listen()函数

是换换内容得时候了。假如你不希望与远程的一个地址相连,或者说, 仅仅是将它踢开,那你就需要等待接入请求并且用各种方法处理它们。处 理过程分两步:首先,你听--listen(),然后,你接受--accept() (请看下面的 内容)。

除了要一点解释外,系统调用 listen 也相当简单。

int listen(int sockfd, int backlog);


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-53951-8.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...