基本TCP套接字编程

1 socket函数

为了执行网络I/O,一个进程必须做的一件事情就是调用socket函数,指定期望的通信协议类型(使用Ipv4的TCP,使用Ipv6的UDP,Unix域字节流协议等)。

# include<sys/socket.h>
int socket(int family,int type,int protocol);
返回:若成功则为非负描述符,若出错则为-1

其中family参数指明协议簇,它是下图一所示的某个常值。该参数也常常被称为协议域。

type参数指明套接字类型,它是图二所示的某个常值。

protocol参数应设为图三所示的某个协议类型常值,或者设为0,以选择所给定的family和type组合的系统默认值。

图一 socket的family值:

family 说明

AF_INET

AF_INET6

AF_LOCAL

AF_ROUTE

AF_KEY


IPv4协议

IPv6协议

Unix域协议

路由套接字

密钥套接字

 

 

 

 

 

 

图二 socket的type值

type 说明

SOCK_STREAM

SOCK_DGRAM

SOCK_SEGPACKET

SOCK_RAW


字节流套接字

数据报套接字

有序分组套接字

原始套接字

 

 

 

 

 

图三 socket函数的AF_INET或AF_INET6的protocol常值

protocol     说明

IPPROTO_TCP

IPPROTO_UDP

IPPROTO_SCTP


TCP传输协议

UDP传输协议

SCTP传输协议

 

 

 

 

图四 socket函数的family和type的组合

                                         AF_INET                   AF_INET6               AF_LOCAL     AF_ROUTE  AF_KEY

SOCK_STREAM
SOCK_DGRAM
SOCK_SEQPACKET  
SOCK_RAW
TCP|SCTP TCP|SCTP   是    
UDP UDP    
SCTP SCTP      
IPv4     IPv6  

 

 

 

 

 

socket函数成功返回一个小的非负整数值,它与文件描述符类似,我们把它称为套接字描述符,简称sockfd。

2 connect函数

 

时间: 2024-12-31 12:18:47

基本TCP套接字编程的相关文章

windows和linux的tcp套接字编程实例代码

windows下面的代码如下面 //Server.cpp #include <iostream> #include <windows.h> #define IP "127.0.0.1" #define PORT 8888 #pragma comment(lib,"ws2_32.lib") using namespace std; char* GetTime(); int main() {     WSADATA wsaData;     WO

TCP套接字编程模型及实例

摘要:     本文讲述了TCP套接字编程模块,包括服务器端的创建套接字.绑定.监听.接受.读/写.终止连接,客户端的创建套接字.连接.读/写.终止连接.先给出实例,进而结合代码分析.   PS:本文权当复习套接字编程的读书笔记.   一.TCP套接字编程模型     同一台计算机上运行的进程可以利用管道.消息队列.信号量.共享内存等进行相互通信,不同计算机上运行的进程可以通过套接字网络IPC接口进行相互通信.套接字编程基本步骤如下图所示: 图 TCP套接字编程模型[1] 二.源代码     本

《计算机网络:自顶向下方法(原书第6版)》一2.7 TCP套接字编程

2.7 TCP套接字编程 我们已经看到了一些重要的网络应用,下面就探讨一下网络应用程序是如何实际编写的.在2.1节讲过,典型的网络应用是由一对程序(即客户程序和服务器程序)组成的,它们位于两个不同的端系统中.当运行这两个程序时,创建了一个客户进程和一个服务器进程,同时它们通过从套接字读出和写入数据彼此之间进行通信.开发者创建一个网络应用时,其主要任务就是编写客户程序和服务器程序的代码.网络应用程序有两类.一类是实现在协议标准(如一个RFC或某种其他标准文档)中所定义的操作:这样的应用程序又称为"

UNIX网络编程:基本TCP套接字编程

一.基于TCP协议的网络程序 下图是基于TCP协议的客户端/服务器程序的一般流程: 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后,调用connect()发出SYN段并阻塞等待服务器应答,服务器应答一个SYN-ACK段,客户端收到后从connect()返回,同时应答一个ACK段,服务器收到后从accept()返回. 查看本栏目更多精彩内容:http://www.bianceng.cnht

Linux下套接字详解(四)----简单的TCP套接字应用(迭代型)

前面我们已经将了TCP/UDP的基本知识,还说了并发服务器与迭代服务器的区别,我们大致了解大多数TCP服务器是并发的,大多数UDP服务器是迭代的 ,即我们在进行数据传送的时候,往往使用服务器与客户但之间无连接的UDP报文,但是在用户需要上传下载文件时,就会在客户端和服务器之间建立一条TCP连接,进行文件的传送 那么我们下面就来实现一个简单的TCP服务器. TCP套接字编程模型图 我们首先看一下TCP客户端与服务端的编程模型和流程. 此模型不仅适合迭代服务器,也适合并发服务器,不管服务器是并发的还

VC中TCP实现 异步套接字编程的原理+代码

所谓的异步套接字编程就是  调用了 如下函数   WSAAsyncSelect   设置了 套接字的状态为异步,有关函数我会在下面详细介绍... 异步套接字解决了 套接字编程过程中的堵塞问题 ...... 什么是堵塞?请看下面  你可能有过这样的体会  在  VC编写基于界面的网路程序时候  ,调用 recv recvfrom   accept  等函数的时候 整个程序的主线程进入堵塞状态直到 有连接或者信息的到来.  我们可以利用多线程的方法解决主线程堵塞的问题,但是我们如果一个程序需要多个套

PHP套接字编程

编程 作者:久隆信息/张晓刚 套接字编程,一般使用c或c++.特别的在web应用程序开发中,常用perl实现套接字.除此以外,用php进行套接字编程也是一个选择.Php可以胜任吗?当然可以.Php是一门高质量的web应用程序开发语言,他的许多特性可以处理众多的任务,网络编程也不例外. 1. 理解套接字 Mail.ftp.telnet.name和finger这些服务都是在一个专用的公开的端口上提供的,通过连接到这些端口,客户程序就能够访问这些服务.这与现实生活是相似的--当需要干洗衣服的时候,找干

Windows Socket网络编程(二) 套接字编程原理

一.客户机/服务器模式 在TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model).该模式的建立基于以下两点:1.非对等作用:2.通信完全是异步的.客户机/服务器模式在操作过程中采取的是主动请示方式: 首先服务器方要先启动,并根据请示提供相应服务:(过程如下) 1.打开一通信通道并告知本地主机,它愿意在某一个公认地址上接收客户请求. 2.等待客户请求到达该端口. 3.接收到重复服务请求,处理该请求并发送应答信号. 4.返回第二步,等待另一客户

C# 网络编程之套接字编程基础知识

      最近阅读了周存杰编写的<C#网络编程实例教程>并阅读了很多相关方面的资料,同时自己也做了一些套接字编程方面的C#程序,所以根据它的知识总结了最近的套接字编程的一些知识点,方便自己的理解与他人的学习,同时也有一些自己以前学习的计算机网络.操作系统等相关知识. 一.   套接字编程的概念       套接字(Winsock)是一种独立于协议的网络编程接口,在OSI中集中在会话层和传输层.(补充知识)简单回归网络知识,计算机网络中的"五层协议的体系结构"和"