一.TCP/IP解析 TCP/IP协议的核心部分是传输层协议(TCP.UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现.因此用户一般不涉及.编程时,编程界面有两种形式: 1.1.是由内核直接提供的系统调用: 1.2.使用以库函数方式提供的各种函数. 前者为核内实现,后者为核外实现.用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现. 二.TCP/IP服务器及客户端操作流程 2.1服务器操作流程 2.1.1 加载套接字库.在初始化阶段调用 WSA…
一.基本概念 a) 同步:指发送方发出数据后,等收到接收方发回的响应,才发下一个数据包的通信方式. nb)异步:指的是发送方不等接收方响应,便接着发下个数据包的通信方式. c) 阻塞:指调用某函数时,直到该函数完成操作,才返回:否则一直阻塞在该调用上. d) 非阻塞:指调用某操作时,不管操作是否成功都立即返回,而不会挂在该操作上. 二.soeket简介 Client/Server (客户机/服务器)模型为最常用的模型.在这种方案中客户应用程序向服务器程序请求服务,一个服务器程序通常用一个众所周知…
一.大端.小端法定义 1.1小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. (主机字节顺序) 1.2 大端法(Big-Endian)就是高位字节排放在内存的低地址端即该值的起始地址,低位字节排放在内存的高地址端.(网络字节顺序) 举个简单的例子,对于整形0x12345678.它在大端法和小端法的系统内中,分别如图所示的方式存放. 二.字节顺序转换 Windows Sockets 的htons函数将把一个u_short类型的值从…
本文就是在windows下进行socket编程,搭建一个TCP客户端. 在visual studio下编程,首先在windows下进行初始化(这点在linux下是不需要的): /* 初始化 Winsock */ #include<stdio.h> #include<winsock2.h> #pragma comment(lib,"ws2_32.lib") int main(int argc, char *argv[]) { WSADATA wsa; printf…
基于 UDP 无连接的 socket 编程 一.服务器端操作流程 1.1加载套接字库(WSAStartup) 1.2 创建套接字  (socket) 1.3将创建的套接字绑定到一个本地地址和端口上  (bind) 1.4等待接收数据.后与客户端实现实时交流    (recvfrom / sendto) 1.5关闭套接字 recvfrom函数将接收一个数据报信息并保存源地址.函数原型如下: int recvfrom(SOCKET s, char FAR* buf, int len, int fla…
与c/c++ socket编程对照见http://blog.csdn.net/aspnet_lyc/article/details/38946915 server: import socket PORT = 9999 BACKLOG = 5 MAXLINE = 1024 listenfd = socket.socket(socket.AF_INET,socket.SOCK_STREAM) listenfd.bind(('',PORT)) listenfd.listen(BACKLOG) whil…
//Server服务器端Server.cpp 1 // 定义控制台应用程序的入口点. // #include "stdafx.h" #include <winsock2.h> #include<iostream> #pragma comment(lib,"ws2_32.lib") using namespace std; int main() { WORD wVersion; WSADATA wsaData; int er; //1.初始化版…
一.客户端操作流程 1.1 加载套接字库(WSAStartup()) 1.2创建套接字(socket()). 1.3向服务器发出连接请求(connect()). 对于客户端来说,它不需要绑定,可以直接连接服务器.这可以通过调用connect函数与服务器建立一个连接.其函数原型如下: int connect(SOCKET s, const struct Sockaddr FAR* name , int namelen); 参数: a) s:客户端用于首发数据的套接字. b) name:指定网路主机…
首先我们须要大致了解TCP的几点知识: 1.TCP的特点:面向连接的可靠性传输 2.TCP的三次握手建立连接和四次挥手释放连接.但为什么TCP要三次握手建立连接呢? 答:由于两次握手无法保证可靠性.若最后一次失败,则client又会又一次发起建立连接的请求,那么必定会消耗资源,而三次握手明显可以达到这个目的. 3.TCP为何是面向连接的? 答:由于TCP是传输层的协议,传输层的下层是网络层.IP协议就是网络层的协议,可是IP仅仅提供尽力而为的的传输机制:而传输层的上层为应用层,它负责将下层的数据…
① TCP是个流协议,它存在粘包问题 TCP是一个基于字节流的传输服务,"流"意味着TCP所传输的数据是没有边界的.这不同于UDP提供基于消息的传输服务,其传输的数据是有边界的.TCP的发送方无法保证对等方每次接收到的是一个完整的数据包.主机A向主机B发送两个数据包,主机B的接收情况可能是 产生粘包问题的原因有以下几个: 第一 .应用层调用write方法,将应用层的缓冲区中的数据拷贝到套接字的发送缓冲区.而发送缓冲区有一个SO_SNDBUF的限制,如果应用层的缓冲区数据大小大于套接字发…