【tcp-ip学习总结】socket编程基础/网络编程基础

两个网络程序之间需要通信就需要在他们之间建立一个链接通道,这个通道就是由一个五元组组成

五元组:(协议、本地IP地址、本地端口号、远程IP地址、远程端口号)

socket编程原理

socket套接口

网络程序之间通信是依靠socket套接口进行通信。

例如:主机A上面的QQ程序需要发送消息到主机B上面的QQ,步骤就是:

①主机A上面的QQ发消息存到主机A上面的socket中

②这个socket通过主机A的网络管理软件通过网络接口卡传到主机B中得网络接口卡

③主机B的网络接口卡接收到消息后再传给主机B的网络管理软件再传到主机B的socket中。

④然后主机B中得QQ读取socket中得信息

套接口分类

①流式套接口(SOCK_STREAM)可靠的面向连接的数据传输服务(适用于TCP)

②数据报套接口(SOCK_DGRAM)无连接不可靠的双向数据传输服务(使用与UDP)

③原始套接口(SOCK_RAM)很少用

socket编程原理

①服务端调用socket()函数开启一个服务,就是创建一个套接口

②这个socket条用bind()函数把一个端口跟这个socket绑定

③调用listen()函数监听客户端的请求

④客户端也调用socket()函数穿件一个请求服务的套接口,然后调用connect()函数请求连接

⑤服务端调用accept()函数接收请求连接,然后使用recv()函数从套接口读数据,调用send()函数向套接口发送数据

⑥关闭套接口资源

winsock API套接口连接的建立

①WSAStartup()检查协议栈的安装情况

②socket()函数创建套接口socket

SOCKET socket (
int af,//地址族AF_INET
int type,//套接口类型SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
int protocol//协议字段IPPROTO_TCP, IPPROTO_UDP
)

③bind()绑定本地地址,就是把一个套接口与主机地址和端口号联系起来。没有错误返回0

int bind(
    SOCKET s,//套接口
    const struct sockaddr FAR* name,//IP地址和端口地址
    int namelen//地址参数的长度
)

关于地址参数、

struct sockaddr_in {
    short sin_family;//必须是AF_INET
    u_short sin_port;//16位端口号
    struct in_addr sin_addr;//IP地址
    char sin_zero[8];//一般是0
}

④监听连接 listen() 当一个套接口创建好后,然后绑定好,就该调用listen()函数监听连接请求了,没有错误返回0

int listen(
    SOCKET s,//已绑定了地址,还没有建立连接的套接口
    int backlog//指定正在等待连接的最大队列长度
)

⑤请求连接connect() 客户端套接口创建好以后就可以调用这个函数进行连接

int connect(
    SOCKET s,
    const struct sockaddr FAR* name,
    int namelen
)

⑥接收连接accept() 服务器接收客户端的连接请求

SOCKET accept(
    SOCKET s,//处于监听状态的套接口
    struct sockaddr FAR* addr,//用来存放发出连接的那个客户端的IP地址信息
    int FAR* addrlen//客户端接口地址的长度
)

winsock API基本数据传输

TCP使用的数据传输函数

①send()函数,在已连接的套接口上发送数据

int send(
    SOCKET s,//已建立连接的套接口
    const char FAR*buf,//字符缓冲区,内有将要发送的数据
    int len,//即将发送的缓冲区的字符数
    int flags//控制传输方式,可以是0
)

②recv()函数,从套接口接收数据

int recv(
    SOCKET s,//已建立的套接口
    char FAR* buf,//用于接收数据的缓冲区
    int len,//缓冲区的长度
    int flags//调用方式 ,正常为0
)

UDP使用的数据传输函数

①recvfrom()接收数据

int recvfrom(
    SOCKET s,//一个套接口
    char FAR* buf,//接收数据的缓冲区
    int len,//缓冲区长度
    int flags,//调用操作方式
    struct sockaddr FAR* from//源地址,向谁要信息
    int FAR* fromlen//
)

②sendto()发送数据

int sendto(
    SOCKET s,//套接口
    const char FAR* buf,//将要发送数据的缓冲区
    int len,//buf缓冲区长度
    int flags,//调用方式
    const struct sockaddr FAR* to,//目的套接口地址
    int tolen//to所指地址长度
)

winsock API连接与关闭套接口

①shutdown()关闭读写通道

shutdown(
    SOCKET s,//套接口
    int how//关闭时禁止那种操作
)

②colsesocket()关闭套接口

int closesocket(
    SOCKET s
)

③WSACleanup()终止使用winsock

int WSACleanup();
时间: 2024-08-26 16:40:33

【tcp-ip学习总结】socket编程基础/网络编程基础的相关文章

聊聊Socket、TCP/IP、HTTP、FTP及网络编程

聊聊Socket.TCP/IP.HTTP.FTP及网络编程 提交 我的留言 加载中 已留言 1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP/IP协议组 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成. IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机. TCP层负责面向应

关于Socket、TCP/IP、HTTP、FTP及网络编程

来源:陶邦仁 链接:http://blog.jobbole.com/99694/ 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,再者如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP/IP协议组 TCP/IP协议(传输控制协议)由网络层的IP协议和传输层的TCP协议组成. IP层负责网络主机的定位,数据传输的路由,由IP地址可以唯一的确定Internet上的一台主机. TCP层负责面向应用的可靠的或非可靠的数据传输机制

http、TCP/IP协议与socket之间的区别

网络由下往上分为:  www.2cto.com 物理层-- 数据链路层-- 网络层--                       IP协议 传输层--                       TCP协议 会话层-- 表示层和应用层--           HTTP协议 1.TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上. 建立起一个TCP连

Http TCP/IP协议和socket之间的区别和联系

总结,TCP/IP是传输层协议,主要解决数据如何在网路中传输,socket是TCP/IP协议的具体实现,是对TCP/IP协议的封装和应用,属于程序员层面,HTTP是应用层协议,应用层协议很多,类似的像HTTP.FTP.Telnet. 传输层协议和应用层协议的区别和分工可以用下面的一段话做总结: "我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如 果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP.FTP.T

Http、TCP/IP协议与Socket

网络由下往上分为: 物理层-- 数据链路层-- 网络层-- IP协议 传输层-- TCP协议 会话层-- 表示层和应用层-- HTTP协议 1.TCP/IP连接 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接.TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在"无差别"的网络之上. 建立起一个TCP连接需要经过"三次握手": 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态

基于Socket的java网络编程

1.什么是Socket 网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定. 但是,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的.在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程. 2.Socket通讯的过程 Server端Listen(监听)

TCP/IP学习笔记(1)----------详解

TCP/IP协议 Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成.TCP/IP 定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准.协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的协议来完成自己的需求.通俗而言:TCP负责发现传输的问题,一有问题就发出信号,

iOS网络编程开发—网络编程基础

iOS网络编程开发—网络编程基础 一.网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1)几乎所有应用都需要用到网络,比如QQ.微博.网易新闻.优酷.百度地图 (2)只有通过网络跟外界进行数据交互.数据更新,应用才能保持新鲜.活力 (3)如果没有了网络,也就缺少了数据变化,无论外观多么华丽,终将变成一潭死水 移动网络应用 = 良好的UI + 良好的用户体验 + 实时更新的数据 新闻:网易新闻.新浪新闻.搜狐新闻.腾讯新闻 视频:优酷.百度视频.搜狐视频.爱奇艺视频 音乐:QQ音乐

如何使用socket进行java网络编程(二)

通过在如何使用socket进行java网络编程(一)中程序的编写,可以总结出一些常用的java socket编程的范例来. ServerSocket server = new ServerSocket(_PORT_); while (true) { Socket nextClient = server.accept(); SocketHandler handler = new SocketHandler(nextClient); Thread t = new Thread(handler); t

ICMP和arp协议以及tcp/ip学习

ICMP:http://blog.csdn.net/tigerjibo/article/details/7356936 ARP:http://blog.csdn.net/tigerjibo/article/details/7351992 IP分片:http://www.vants.org/?post=106 TSO/GSO linux内核源码剖析 udp: http://modernrobber.blog.163.com/blog/static/214636320074305183395/ ht