Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 软件相关 > unix端口号与socket编程
【标  题】:unix端口号与socket编程
【关键字】:unix,socket
【来  源】:http://blog.chinaunix.net/article.php?articleId=60402&blogId=11794

unix端口号与socket编程

Your Ad Here 由理解端口号分段 到程序的执行过程 理解tcp连接的建立的3次握手过程和tcp连接的断开过程

端口号分3段:

1.well-known ports (0-1023) 由IANA分配和控制

2.registered ports (1024-49151) 不受IANA控制,但由IANA登记

3.ephemeral  ports (49152-65535) 临时端口

注意:所有小于1024的端口为unix保留端口。因此分配给这些端口的服务器启动时必须具有超级用户特权

看下面的取系统时间的服务器客户端程序:

/*server*/

#include "unp.h"
#include <time.h>

int
main(int argc, char **argv)
{
 int     listenfd, connfd;
 struct sockaddr_in servaddr;
 char    buff[MAXLINE];
 time_t    ticks;

 listenfd = Socket(AF_INET, SOCK_STREAM, 0);//socket,bind,listen 准备连接(被动连接)

 bzero(&servaddr, sizeof(servaddr));
 servaddr.sin_family      = AF_INET;
 servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
 servaddr.sin_port        = htons(13); /* daytime server */

 Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

 Listen(listenfd, LISTENQ);

 for ( ; ; ) {
  connfd = Accept(listenfd, (SA *) NULL, NULL);//接受连接请求

        ticks = time(NULL);
        snprintf(buff, sizeof(buff), "%.24s ", ctime(&ticks));
        Write(connfd, buff, strlen(buff)); //确认返回请求数据

  Close(connfd);//关闭连接
 }
}

/*client*/

#include "unp.h"

int
main(int argc, char **argv)
{
 int     sockfd, n;
 char    recvline[MAXLINE + 1];
 struct sockaddr_in servaddr;

 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(13); /* 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) {  //read发送请求 获得服务器响应数据
  recvline[n] = 0; /* null terminate */
  if (fputs(recvline, stdout) == EOF)
   err_sys("fputs error");
 }
 if (n < 0)
  err_sys("read error");

 exit(0);//连接关闭
}

在server端必须以 root用户启动服务:

[root]./a

在client 察看结果:

[user]./a 127.0.0.1

得到的结果是:Wed Dec  7 09:35:48 2005
 

绑定ip随笔:【上一篇】
宝安中学计算机校园网的组建方案:【下一篇】
【相关文章】
  • Unix环境高级程序设计入门----文件系统的相关编程(下)
  • 百元Socket 478散热器导购!
  • Socket A散热器完全导购
  • 揭开Socket编程的面纱
  • Unix编程常见问题解答一
  • Unix编程常见问题解答二
  • 见证Unix操作系统发展历史
  • wince Socket编程之一《总览》
  • wince Socket编程之一《解析CCeSocket》
  • 在NCR UNIX 中解除 root 的 FTP 使用限制
  • 【随机文章】
  • WPF实例学习(00)
  • Linux 2005是否依旧好年景
  • 新Orcas语言特性:Lambda表达式
  • 在Windows 98下也可以安全拔出闪存
  • .Net-Com双向数据交换的实现(RecordSet与.Net DataSet的转化)
  • VDSL技术
  • 成功驱动网达IDVM-CD56内猫(5628芯片)
  • 绑定 -- Classes and Objects in PHP5
  • ExpressNavBar FS v1.2.1 For D6,7
  • 如何面对家人的离去
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.