socket是什么东西,有人告诉我吗

解决方案 »

  1.   

    Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。---以上整理自百度百科
      

  2.   

    socket相关知识
    1.什么是socket
      所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
    重要的Socket API
      重要的Socket API:java .net.Socket继承于java.lang.Object,有八个构造器,其方法并不多,下面介绍使用最频繁的三个方法,其它方法大家可以见JDK-1.3文档。   Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。"阻塞"是一个术语,它使程序运行暂时"停留"在这个地方,直到一个会话产生,然后程序继续;通常"阻塞"是由循环产生的。   getInputStream方法获得网络连接输入,同时返回一个InputStream对象实例。   getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。 注意:其中getInputStream和getOutputStream方法均可能会产生一个IOException,它必须被捕获,因为它们返回的流对象,通常都会被另一个流对象使用。
    2.如何开发一个Server-Client模型的程序
      开发原理:   服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。   客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。   Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
    常用的Socket类型
      有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。 Socket建立为了建立Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:int socket(int domain, int type, int protocol);domain指明所使用的协议族,通常为AF_INET,表示互联网协议族(TCP/IP协议族);type参数指定socket的类型:SOCK_STREAM 或SOCK_DGRAM,Socket接口还定义了原始Socket(SOCK_RAW),允许程序使用低层协议;protocol通常赋值0。Socket()调用返回一个整型socket描述符,你可以在后面的调用使用它。 Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。 Socket执行体为你管理描述符表。两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。 socket在测量软件中的使用也很广泛
    编辑本段二 socket函数
    简介
      SOCKET socket( int af, int type, int protocol );   应用程序调用socket函数来创建一个能够进行网络通信的套接字。   第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;   第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据报以及协议首部);   第三个参数指定应用程序所使用的通信协议。   该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET。套接字描述符是一个整数类型的值。每个进程的进程空间里都有一个套接字描述符表,该表中存放着套接字描述符和套接字数据结构的对应关系。该表中有一个字段存放新创建的套接字的描述符,另一个字段存放套接字数据结构的地址,因此根据套接字描述符就可以找到其对应的套接字数据结构。每个进程在自己的进程空间里都有一个套接字描述符表但是套接字数据结构都是在操作系统的内核缓冲里。   下面是一个创建流套接字的例子: struct protoent *ppe; ppe=getprotobyname("tcp"); SOCKET ListenSocket=socket(PF_INET,SOCK_STREAM,ppe->p_proto);
    编辑本段三 PHP 中的SOCKET
      PHP有强大的SOCKET操作能力,它的处理方式更接近于C,但是没有C的繁琐。可以看作是对C操作的SOCKET的一个封装。   开启一个socket监听示例程序:   <?php   // 设置一些基本的变量   $host="192.168.1.99";   $port=1234;   // 设置超时时间   set_time_limit(0);   // 创建一个Socket   $socket=socket_create(AF_INET,SOCK_STREAM,0) or die("Could not create   socket\n");   //绑定Socket到端口   $result=socket_bind($socket,$host,$port) or die("Could not bind to   socket\n");   // 开始监听链接   $result=socket_listen($socket,3) or die("Could not set up socket   listener\n");   // accept incoming connections   // 另一个Socket来处理通信   $spawn=socket_accept($socket) or die("Could not accept incoming   connection\n");   // 获得客户端的输入   $input=socket_read($spawn,1024) or die("Could not read input\n");   // 清空输入字符串   $input=trim($input);   //处理客户端输入并返回结果   $output=strrev($input) ."\n";   socket_write($spawn,$output,strlen($output)) or die("Could not write   output\n");   // 关闭sockets   socket_close($spawn);   socket_close($socket);   ?>   Socket   应用程序通常通过"Socket"向网络发出请求或者应答网络请求   常用的Socket类型   有两种:流式Socket - SOCK_STREAM   数据报式Socket - SOCK_DGRAM   两种模型:   对等模型   C/S模型   1.对等模型:   1.建立socket:socket   int socket(   int domain,//地址族的类型AF_UNIX AF_INET   int type,//支持的数据格式:流SOCK_STREAM/报文SOCK_DGRAM   int protocol);//支持的协议,建议为0   返回值:   成功返回文件描述符号。   失败返回-1;   2.绑定在地址上(文件目录地址)URL(Universe Resource Location)   协议://路径/文件名   file:///usr/bin/ls   http://192.168.0.72/index.php   struct sockaddr;   struct sockaddr_un;un=unix   struct sockaddr_in;in=internet   int bind(int fd,//socket描述符号   struct sockaddr*addr,//绑定地址   socklen_t size);//地址长度   3.接收数据   read/recv/recvfrom   4.关闭socket   1.建立socket:socket   2.连接到目标:connect(可选)   3.发送数据:write/send/sendto   4.关闭close   2.C/S模型   Server Client   建立socket:socket 建立socket:socket   绑定地址:bind 建立连接:connect   监听:listen   接收:accept   read/write read/write   close close   int listen(int fd,int num);   0:监听成功   -1:失败   int accept(int fd,   struct sockaddr*addr,//返回连接着的地址   socklen_t* len)//接收返回地址的缓冲长度   返回:   -1:接收失败   >=0:对应客户的文件描述符号 
      

  3.   

    不用想的那么麻烦,就是一个提供给你的接口类,想多了解,自己直接看api就可以
      

  4.   

    Socket 如果没有一些网络通信知识的话,只看 API 基本上很难看明白。
      

  5.   

    客户端 Socket s=new Socket(服务器ip,端口);
    服务器 ServerSocket ss=new ServerSocket(端口);
    Socket s2=ss.accept();这样就可以套接了
      

  6.   

    socket ....  给你做个比喻吧!  有个桥,桥有两头,左和右,分别叫做a端口和b端口,这个桥就是socket。明白了么 ? socket是连接两个端口的通道
      

  7.   

    socket就是网络套接字,网络编程用的。