MyException - 我的异常网
当前位置:我的异常网» 编程 » 【tcp-ip学习小结】socket编程基础/网络编程基础

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

www.MyException.Cn  网友分享于:2015-08-26  浏览:0次
【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();

文章评论

2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员和编码员之间的区别
程序员和编码员之间的区别
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
那些争议最大的编程观点
那些争议最大的编程观点
Java程序员必看电影
Java程序员必看电影
旅行,写作,编程
旅行,写作,编程
我的丈夫是个程序员
我的丈夫是个程序员
总结2014中国互联网十大段子
总结2014中国互联网十大段子
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
鲜为人知的编程真相
鲜为人知的编程真相
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
如何成为一名黑客
如何成为一名黑客
代码女神横空出世
代码女神横空出世
一个程序员的时间管理
一个程序员的时间管理
老程序员的下场
老程序员的下场
 程序员的样子
程序员的样子
程序员都该阅读的书
程序员都该阅读的书
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
漫画:程序员的工作
漫画:程序员的工作
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
每天工作4小时的程序员
每天工作4小时的程序员
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
10个调试和排错的小建议
10个调试和排错的小建议
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员必看的十大电影
程序员必看的十大电影
中美印日四国程序员比较
中美印日四国程序员比较
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
编程语言是女人
编程语言是女人
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有