Socket原理与编程基础

•socket简介

  socket是进行通讯的一种方式,即调用这个网络库的一些api韩寒苏实现分布在不同主机的相关进程之间的数据交换。

  名词定义:

    1)IP地址:依照TCP/IP协议分配给本地主机的网络地址,2个进程要通信,任一进程首先要知道通讯对方的位置,即IP地址。

    2)端口号:用来辨别本地通讯进程,一个本地的基尼从在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有访问的端口号。

    3)连接:两个进程间的通讯链路

•客户/服务端模式

  •服务端:其过程是首先服务器放要先开启,并根据请求提供相应的服务。

  1)打开一通信通道并告知本地主机,他愿意在某一个公认地址上某端口接收客户请求

  2)等待客户请求到到该端口

  3)接收到客户端的请求时,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求,新进程处理此客户请求并不需要对其请求做出应答。服务完成后,关闭新进程与客户的通信链路,并终止。

  4)返回第2步骤,等待另外一个客户请求

  5)关闭服务器

  •客户端:

  1)打开-通信通道,并连接到服务器所在主机的特定端口

  2)向服务器发请求报文,等待并接收应答,继续提出请求

  3)请求结束后关闭通道并终止。

  •说明:

  1)从上面的模式来看,流程会有所不同,因此其代码也会不同

  2)服务器进程先启动,主要系统运行,该服务进行就一直存在,知道进程关闭。

•常见API函数

  1)socket():创建套接字,-- create a new socket object

  2)bind(address):绑定本地地址,必须确保之前没有绑定过。

  3)close():

  4)accept(self):

     accept() -> (socket object, address info)  返回connection、address对,其中connection是新的socket对象,可以在上面发送和接收数据,address是另一端的socket地址

  5)connect(address):连接该地址上的远端socket

  6)getsockname():getsockname() -> address info    返回socket自己的地址,对查找端口号有用

  7)listen(backlog):监听socket连接,参数表示最大连接队列数,通常为5,最小为0

  8)recv(bufsize):recv(buflen[, flags]) -- receive data   接收数据,返回表示接收到数据的string。bufsize表示一次接收到的数据最大量

  9)send(string):发送数据,返回发送的数据量,程序自己负责检查是否所有的数据已发送并自己处理未发送的数据

  10)sendall(string):sendall(data[, flags])     发送数据,该函数会持续发送数据知道数据发送完毕或出现错误为止。若发送成功返回none。

  11)settimeout():

      设置阻塞模式下socket的超时时间,其值以秒计算,若给定float,socket的后续操作若在给定超时时间内没有完成,将触发timeout异常。

  12)gettimeout():返回超时时间,单位秒或None

  13)gethostname():gethostname() -> string    返回当前主机名,--return the current hostname

  14)gethostbyname():

      gethostbyname(host) -> address    通过主机名获取IP地址,参数为主机名,如:PC-20150412FUUA-- map a hostname to its IP number

  15)gethostbyaddr():

      gethostbyaddr(host) -> (name, aliaslist, addresslist)     参数为主机名或IP地址 -- map an IP number or hostname to DNS info,如:(‘PC-20150412FUUA‘, [], [‘fe80::349b:92dc:1bb2:58ca‘])

  16)getservbyname():

      socket.getservbyname(‘http‘,‘tcp‘)   参数:将服务名和一个协议名,返回的是端口号-- map a service name and a protocol name to a port number

时间: 2024-11-05 15:56:25

Socket原理与编程基础的相关文章

转:Socket原理与编程基础

from: http://acm.tzc.edu.cn/acmhome/projectList.do?method=projectNewsDetail&nid=2 一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP. (2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均

Socket原理与编程基础(转)

一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP. (2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号. (3)连接:指两个进程间的通讯链路. (4)半相关:网络中用一个三元组可以在

Socket原理及编程

一.Socket原理 按照一切皆文件的原理,socket相当于网络中的文件操作. 网络中进程之间的通信PID通过三元组ip地址.协议.端口号标识. socket通信是“打开-读写-关闭“得一个实现. 二.Socket函数 int socket(int domain,int type,int protocol)相当于打开文件的操作,常用的socket(AF_INET,SOCK_STRAM,IPPROTO_TCP).int bind(int sockfd,const struct sockaddr

Socket 之 原理与编程基础

一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的网络地址,两个进程要通讯,任一进程首先要知道通讯对方的位置,即对方的IP. (2)端口号:用来辨别本地通讯进程,一个本地的进程在通讯时均会占用一个端口号,不同的进程端口号不同,因此在通讯前必须要分配一个没有被访问的端口号. (3)连接:指两个进程间的通讯链路. (4)半相关:网络中用一个三元组可以在

嵌入式 Linux网络编程(一)——Socket网络编程基础

嵌入式 Linux网络编程一--Socket网络编程基础 一.Socket简介 1.网络中进程间通信 本机进程使用进程号区别不同的进程进程间通信方式有管道.信号.消息队列.共享内存.信号量等.网络中进程间的通信首先需要识别进程所在主机在网络中的唯一标识即网络层的IP地址主机上的进程可以通过传输层的协议与端口号识别. 2.Socket原理 Socket是应用层与TCP/IP协议族通信的中间软件抽象层是一种编程接口.Socket屏蔽了不同网络协议的差异支持面向连接(Transmission Cont

python全栈开发从入门到放弃之socket网络编程基础

网络编程基础 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 为何学习socket一定要先学习互联网协议: 1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件 2.其次:C/S架构的

Java Socket编程基础篇

原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 网络基础知识点: 两台计算机间进行通讯需要以下三个条件 IP地址.协议.端口号: IP地址:定位应用所在机器的网络位置.(比如家庭住址:北京市朝阳区XX街道XX小区) 端口号

socket编程基础2

包含头文件<sys/socket.h> 功能:创建一个套接字用于通信 原型 int socket(int domain, int type, int protocol); 参数 domain :指定通信协议族(protocol family) type:指定socket类型,流式套接字SOCK_STREAM,数据报套接字SOCK_DGRAM,原始套接字SOCK_RAW protocol :协议类型 返回值:成功返回非负整数, 它与文件描述符类似,我们把它称为套接口描述字,简称套接字.失败返回-

socket编程基础3

服务器端尽可能使用RUSEADDR. 在绑定之前尽可能调用setsockopt来设置SO_REUSEADDR套接字选项. 使用SO_REUSEADDR选项可以使得不必等待TIME_WAIT状态消失就可以重启服务器. fork()产生一个进程来处理客户端与服务器端之间的消息.父进程保持监听状态连接.accept返回多个已连接套接字! echocli.c #include <unistd.h> #include <sys/types.h> #include <sys/socket