Socket.

Slides:



Advertisements
Similar presentations
預官 ( 士 ) 考試輔導 計算機概論之考前說明 93 年 12 月 20 日 中原大學電算中心 王得智.
Advertisements

1 实验二、 TCP 、 UDP 通信程序设计实验 ——TCP 通信实验 注意 bind 和 listen socket() bind() listen() accept() write() read() TCP Server read() socket() TCP Client connect()
網路程式設計 (Network Programming)
第6章:计算机网络基础 网考小组.
第五章 網際網路 5-1 網際網路的歷史沿革 5-2 網際網路基本運作原理 5-3 連線媒介與連線上網 5-4 網際網路上的熱門應用
《网络基础与Internet应用》.
第6章 计算机网络基础 1.
计算机网络(第 6 版) 第 6 章 应用层 青岛理工大学通信与电子工程学院.
第 12 章 UDP 與 TCP.
马志强 软件学院501室 网络应用开发 马志强 软件学院501室
Chapter 12 UDP 與 TCP.
第2章 计算机网络的协议与体系结构 2.1 计算机网络体系结构的形成 2.2 协议与划分层次 2.3 计算机网络的原理体系结构
第三章 管理信息系统的技术基础 主要内容: 数据处理 数据组织 数据库技术 4. 计算机网络.
DP DHCP原理 ISSUE 1.0.
数据转发过程.
NetGuru 創新 網路通訊實驗教學解決方案 PART I TCP/IP通訊協定深入剖析/以NetGuru實作
第2章 计算机网络体系结构 教学目标: 通过本章的学习,了解计算机网络体系结构和各个层次的相关协议,理解接口和服务等概念。掌握ISO/OSI模型和TCP/IP模型的各个层次及其所实现的功能。掌握IP地址的功能和划分,并对子网掩码和下一代互联网IPv6有相应的了解。
计算机系统安全 第10章 常用攻击手段.
TCP Session Hijack 郭军权
網路基本概念與設定方法 林文宗 資管系助理教授
基于WinSock的邮件系统 1 设计目标: 1.1 SMTP发送邮件服务器(c语言) 1.2 POP3接受邮件服务器(c语言)
第5章 网络软件 开发技术 (一) 软件开发技术基础 计算机教学实验中心.
计算机网络实验介绍 信息网络实验室 2017/9/13 04:55:22.
網路概論.
Advanced Sockets Programming
标准TCP/IP编程接口 ——Socket
第 12 章 UDP 與 TCP.
教师:陈有为 TCP/IP与Internet(A) 教师:陈有为
TCP、UDP 通信实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
計中「多媒體與網路應用」短期訓練課程 FTP server 架設 (in Windows)
第 13 章 DNS 著作權所有 © 旗標出版股份有限公司.
通訊協定 OSI分層模式 與 TCP/IP協定
第3讲 网络安全协议基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
第六章 差错与控制报文 (ICMP).
Socket Programming in C
Socket Programming.
第五章 網際網路 5-1 網際網路的歷史沿革 5-2 網際網路基本運作原理 5-3 連線媒介與連線上網 5-4 網際網路上的熱門應用
Socket 基本觀念.
Internet Protocol (IP)
TCP/IP Protocol Suite TCP/IP協定 第二組 投影片製作by簡嘉宏 綦凱宏 林睿敏 滕孟哲.
在一定程度上 人类的思维产生于 简单个体之间的相互作用 ——Marvin Minsky.
第十讲 TCP协议 协议概述 报文段格式 差错控制 流控和拥塞控制 TCP连接管理 TCP性能问题 TCP软件设计 2018/12/7
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 第六讲 基于ARM的嵌入式硬件结构设计.
中国科学技术大学计算机系 陈香兰(0512- ) Autumn 2010
第七讲 网际协议IP.
第2章 套接字网络编程基础 2.1 UNIX套接字网络编程接口的 产生与发展 2.2 套接字编程的基本概念 2.3 面向连接的套接字编程
校園網路架構介紹與資源利用 主講人:趙志宏 圖書資訊館網路通訊組.
第5讲 网络层 本讲目的: 概述: 理解网络层服务原理: 因特网的实现实例 网络层的服务 路由选择原理 分层的路由选择 IP协议
第 12 章 UDP 與 TCP 著作權所有 © 旗標出版股份有限公司.
第十三章 TCP/IP 與 Internet 網路連結技術
线程同步与异步套接字编程 主讲人:孙鑫
第2讲 网络安全协议基础 此为封面页,需列出课程编码、课程名称和课程开发室名称。
TANet PROTOCOL ANALYSIS - WIRESHARK - 350.
第7章 传输层协议——TCP与UDP 任课教师 卢豫开.
Westmont College 网络互连 Part 4 (传输协议, UDP and TCP, 协议端口)
Web Server 王宏瑾.
Westmont College 网络应用软件 第一讲 (客户-服务器 概念, 协议端口的使用, 套接字API)
Window Socket 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
Advister: Quincy Wu Speaker: Chenglin Tsai Date:3/26
3.1 通訊協定 3.2 開放系統參考模式(OSI) 3.3 公眾數據網路 3.4 TCP/IP通訊協定
傳輸控制協議 /互聯網協議 TCP/IP.
面向非连接的 SOCKET编程 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
SOCKET( ).
網路概論 第3章 協定與模型.
2019/5/3 JAVA Socket(UDP).
指導教授:梁明章 A 許之青 國立高雄大學 2010/06/25
第二章 类型、对象、运算符和表达式.
助教:廖啟盛 JAVA Socket(UDP) 助教:廖啟盛
Internet课程设计 教师:陈 妍 朱海萍 西安交通大学计算机系
第7章 传输层协议——TCP与UDP 任课教师 卢豫开.
Presentation transcript:

Socket

DHCP, Mail, WWW, Telnet, FTP,… Socket 一組介面,介於應用程式與網路之間。 讓程式設計者不需處理網路底層的工作,而專注於本身的程式設計。 Network card Com Ethernet PPP ARP RARP IP ICMP TCP UDP Socket Library DHCP, Mail, WWW, Telnet, FTP,… Application Layer 4 / Transport Layer 3 / Network Layer 2 / Data Link Layer 1 / Physical

Winsock Windows Sockets,簡稱「Winsock」 是以 UNIX 系統上 Berkeley Sockets 的函式為基礎所發展出來的。 從winsock.dll、wsock32.dll到ws2_32.dll, 版本則由1.0、1.1至2.0版 WinSock 應用程式 ws2_32.dll (32 bit) TCP/IP Protocol Network WinSock 1.1 winsock.dll (16 bit) wsock32.dll (32 bit) Winsock 2.0

Stream Socket (TCP) Server socket() bind() Client listen() accept() WSAStartup() Server Stream Socket (TCP) socket() bind() Client listen() WSAStartup() accept() socket() Blocks until connection from client connect() Connection establishment (TCP three-way handshake) Data (request) send() recv() Data (reply) send() recv() closesocket() recv() == 0 closesocket() WSACleanup() WSAcleanup()

Stream Socket (TCP) Server socket() bind() Client listen() accept() WSAStartup() Server Stream Socket (TCP) socket() bind() Client listen() WSAStartup() accept() socket() Blocks until connection from client connect() Connection establishment (TCP three-way handshake) Data (request) send() recv() Data (reply) send() recv() closesocket() recv() == 0 closesocket() WSACleanup() WSAcleanup()

WSAStartup() 連結應用程式與 Windows Sockets DLL 的第一個函式。 int PASCAL FAR WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData ); wVersionRequested:欲使用的Windows Sockets API 的版本。 lpWSAData:指向WSADATA 資料的指標,載入動態庫。 return: 成功:0 失敗:WSASYSNOTREADY / WSAVERNOTSUPPORTED / WSAEINVAL

socket() 建立 Socket SOCKET socket( int af, int type, int protocol ); af:address format AF_INET:IPv4 AF_INET6:IPv6 type:Socket 的型態 SOCK_STREAM:TCP SOCK_DGRAM:UDP protocol:通訊協定 0:不指定 return: 成功 :Socket 的識別碼 失敗 :INVALID_SOCKET

Stream Socket (TCP) socket() bind() Server Client listen() accept() WSAStartup() Stream Socket (TCP) socket() bind() Server Client listen() WSAStartup() accept() socket() Blocks until connection from client connect() Connection establishment (TCP three-way handshake) Data (request) send() recv() Data (reply) send() recv() closesocket() recv() == 0 closesocket() WSACleanup() WSAcleanup()

bind() 指定 Socket 的 port Client 可以不用指定,作業系統會分配一個 int bind( SOCKET s, struct sockaddr_in *name, int namelen ); s:Socket 的識別碼 name:Socket 的位址 struct sockaddr_in servaddr; servaddr.sin_family = AF_INET; //IPv4 servaddr.sin_port = htons(PORT); //PORT最好大於1024 servaddr.sin_addr.s_addr = INADDR_ANY; //不指定本機IP namelen:name 的長度。 return: 成功:0 失敗:SOCKET_ERROR

listen() 設定 Socket 為監聽狀態,準備被連接。 int listen( SOCKET s, int backlog ); s:Socket 的識別碼。 backlog:佇列中連接要求的最大個數。 return: 成功:0 失敗:SOCKET_ERROR

accept() 接受連接要求,產生連接成功的 Socket 原本的 SCOKET s 還是存在的 SOCKET accept( SCOKET s, struct sockaddr_in *addr, int *addrlen ); s:Socket 的識別碼。 addr:用來存放 Client 端的資訊。 addrlen:addr 的長度。 return: 成功:新的Socket識別碼 失敗:INVALID_SOCKET

connect() 要求連接某一 TCP Socket 到指定的對方。 int connect( SOCKET s, struct sockaddr_in *name, int namelen ); s:Socket 的識別碼。 name:存放 Server 端的位址。 struct sockaddr_in clientService; clientService.sin_family = AF_INET; //IPv4 clientService.sin_port = htons(PORT); clientService.sin_addr.s_addr = inet_addr("192.168.0.100"); namelen:name的長度。 return: 成功:0 失敗:SOCKET_ERROR

Stream Socket (TCP) Server socket() bind() Client listen() accept() WSAStartup() Server Stream Socket (TCP) socket() bind() Client listen() WSAStartup() accept() socket() Blocks until connection from client connect() Connection establishment (TCP three-way handshake) Data (request) send() recv() Data (reply) send() recv() closesocket() recv() == 0 closesocket() WSACleanup() WSAcleanup()

send() 使用 Socket 傳送資料 (使用TCP) int send( SOCKET s, char *buf, int len, int flags ); s:Socket 的識別碼 buf:存放要傳送的資料的暫存區 len:buf 的長度 flags:此函式使用的模式,通常設為 0 return: 成功:送出的資料長度 失敗:SOCKET_ERROR

recv() 自 Socket 接收資料 (使用TCP) int recv( SOCKET s, char *buf, int len, int flags ); s:Socket 的識別碼 buf:存放接收到的資料的暫存區 len:buf 的長度 flags:此函式使用的函式,通常設為 0 return: 成功:接收到的資料長度 失敗:SOCKET_ERROR

Stream Socket (TCP) Server socket() bind() Client listen() accept() WSAStartup() Server Stream Socket (TCP) socket() bind() Client listen() WSAStartup() accept() socket() Blocks until connection from client connect() Connection establishment (TCP three-way handshake) Data (request) send() recv() Data (reply) send() recv() closesocket() recv() == 0 closesocket() WSACleanup() WSAcleanup()

closesocket() 關閉某一Socket int closesocket( SOCKET s ); 結束連線 (TCP) 釋放 Socket 所佔用的 port int closesocket( SOCKET s ); s:Socket 的識別碼。 return: 成功:0 失敗:SOCKET_ERROR

WSACleanup() 結束 Windows Sockets DLL 的使用。 int PASCAL FAR WSACleanup( void ); return: 成功:0 失敗:SOCKET_ERROR

Datagram Socket (UDP) 由於不必建立雙方的連線,因此只需利用 sendto 及 recvfrom 傳接資料 最後仍利用 closesocket 關閉 Socket 並釋放資源

sendto() 使用 Socket 傳送資料 int sendto( SOCKET s, char *buf, int len, int flags, struct sockaddr *to, int tolen ); s:Socket 的識別碼 buf:存放要傳送的資料的暫存區 len:buf 的長度 flags:此函式使用的模式,通常設為 0 to:存放對方的位址 tolen:to 的長度 return: 成功:送出的資料長度 失敗:SOCKET_ERROR

recvfrom() 自 Socket 接收資料 int recvfrom( SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen ); s:Socket 的識別碼 buf:存放接收到的資料的暫存區 len:buf 的長度 flags:此函式使用的模式,通常設為 0 from:用來存放對方的位址 fromlen:from 的長度 return: 成功:接收到的資料長度 失敗:SOCKET_ERROR

struct sockaddr_in Internet-specific: 位址和 port 為整數型態 short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; sin_family: AF_INET sin_port: port (0-65535) sin_addr: IP 位址 sin_zero: 保留 struct in_addr { u_long s_addr; }; 位址和 port 為整數型態 u_short sin_port; //16 bit in_addr sin_addr; //32 bit

byte-ordering Internet Protocols 採用 Big-endian 不同機器間位元放的順序可能不同,傳輸時順序必需統一 host byte order 轉換 network byte order port ,16bits,用 htons() 和 ntohs() IP位址,32bits,用 htonl() 和 ntohl() 128.119.40.12 128 119 40 12 12.40.119.128 Big-Endian machine Little-Endian

Thread VC 6.0 -> Project -> setting -> C/C++ -> Project Options 修改 /MLd 成為 /MTd or /MDd,d為debug mode #include <process.h> unsigned __stdcall func(void* arg); _beginthreadex(0,0,func,(void*) arg,0,&ret);

inet_addr() 將字串型態的地址轉成二進制的無號整數 unsigned long inet_addr( char *cp ); return: 成功:無號整數的地址 失敗: INADDR_NONE

Homework 請參考你的 FINAL PROJET 說明 http://www.w3.org/Protocols/rfc2616/rfc2616.html

參考 MSDN - Windows Sockets 2 http://msdn.microsoft.com/en-us/library/ms740673(VS.85).aspx Linux Socket http://www.cs.nctu.edu.tw/~yslin/library/linuxc/main.htm Windows Sockets 電子書 http://www.sockets.com/winsock.htm Windows Socket 速查筆記 http://www.cchsu.com/art/prg_bg5/winsock.htm