黑马程序员技术交流社区

标题: 视频学习笔记之socket编程 [打印本页]

作者: 七里香    时间: 2013-9-16 18:48
标题: 视频学习笔记之socket编程
  当开发客户端与服务器端应用程序时,就一定会与网络通信打交道,那么编程中是怎么实现网络通信的呢?socket就是实现方法。下面是根据视频学习的一些关于socket网络编程的一些总结,可能限于知识面所以写得不够深入,如果小伙伴们对socket编程有更好的见解的话也希望不吝赐教哦。欢迎讨论哈{:soso_e100:}
Socket网络编程:
1.Socket作为进程通信机制,同城称为“套接字”,用于描述ip地址和端口,是一个通信链的句柄(两个程序通信用的)。
     2.socket非常类似于电话的插座。以一个电话网为例,电话的通信双方相当互相与通信的2个应用程序,电话号码就是ip地址,任何用户通话之前首先要占用一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket。然后向对方拨号呼叫,相当于发出连接请求。对方如果在场并空闲,拿起电话话筒,双方就可以正式通话了,相当于连接成功。双方通话的过程,是一方向电话机发出信号对方从电话机接收信号的过程,相当于向socket发送数据和从socket接收数据。通话结束后一方挂掉电话相当于关闭socket,撤销连接。
Socket相关概念:
    .在intelnet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开了一个socket,并绑定到一个端口上,不同的端口对应于不同的服务(应用程序)。
     .例如:http使用80端口,ftp使用的21端口和smtp使用的23端口。
     .有两种类型:
1.  流式socket(stream):是一种面向连接的socket,针对于面向连接的tcp服务应用,安全但效率低。
2.  数据报式socket(datagram):是一种无连接的socket,对应于无连接的udp应用,不安全(丢失,顺序混乱,在接收端要分析重排及要求重发),但效率高。
Socket一般应用模式(服务器端和客户端):
     我们可以通过一幅图来了解socket的应用模式:                               
1.  服务器端welcoming socket开始监听端口(负责监听客户端连接信息)。
2.  客户端client socket连接服务器指定端口(负责接收和发送服务端消息)。
3.  服务器端welcoming socket监听到客户连接,创建connection socket(负责和客户端通信)。
注意:服务器端的socket(至少需要两个)一个负责接收客户端的连接。每接收到一个客户端的连接便在服务端产生一个对应的socket。
1.  在接收到客户端连接时创建。(但不负责与客户端通信)
2.  为每个连接成功的客户端请求在服务器端创建一个对应的socket。(负责与客户端通信)
客户端的socket。
1.  必须指定要连接的服务端地址和端口。
2.  通过创建一个socket对象来初始化一个到服务器端得tcp连接。
Socket通信过程:
    再上一图
    服务器端:
1.  申请一个socket
2.  绑定到一个ip地址和一个端口上
3.  开启侦听,准备接受连接
客户端:
1.  申请一个socket
2.  连接服务器(指明ip地址和端口号)
服务器端接到连接请求后,产生一个新的socket(端口大于1024)与客户端建立连接并进行通讯,原侦听socket继续侦听。
Socket方法:
     相关类:ipaddress类:包含一个ip地址。
     Ipendpoint类:包含了一个ip地址和端口号。
方法:
     Socket()创建一个socket。
     Bind()绑定一个本地的ip和端口号(ipendpoint)。
     Listen()让socket侦听传入的连接尝试,并指定侦听队列的容量。
     Connect()初始化与另一个socket的连接。
     Accept()接收连接并返回一个新的socket。
     Send()输出数据到socket。
     Recive()从socket中读取数据。返回接收到的数据的长度。
     Close()关闭socket(销毁连接)。
最后,版主大人,技术分哦,别忘了哦亲{:soso_e113:}

作者: 许庭洲    时间: 2013-9-16 19:21
值得学习ing!
作者: ┾——黑马    时间: 2013-9-16 20:41
{:soso_e130:}.net交流区顶起..
作者: 七里香    时间: 2013-9-16 21:06
许庭洲 发表于 2013-9-16 19:21
值得学习ing!

喂喂,大神你不能这样啊,本菜鸟写出来抛砖引玉的,你也可以谈一谈你的见解啊。最近正被多线程和socket编程搞得头晕呢。{:soso_e134:}

作者: haxyek    时间: 2013-9-16 22:47
本帖最后由 haxyek 于 2013-9-16 22:50 编辑

有错误吧。。
.例如:http使用80端口,ftp使用的21端口和smtp使用的23端口。


smtp:简单邮件传输协议。端口号应该是25,
telnet端口号是23
不知道是视频问题,还是笔记问题。。你再看一下。

作者: 七里香    时间: 2013-9-17 08:52
haxyek 发表于 2013-9-16 22:47
有错误吧。。
.例如:http使用80端口,ftp使用的21端口和smtp使用的23端口。

我上网查了一下,邮件协议有stmp和pop3两个端口分别是25和110,感谢你的指正{:soso_e100:},视频上面有错误哦。
作者: haxyek    时间: 2013-9-17 09:20
七里香 发表于 2013-9-17 08:52
我上网查了一下,邮件协议有stmp和pop3两个端口分别是25和110,感谢你的指正,视频上面有错 ...

真想给自己加一分。。。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2