Windows下socket编程

本文介绍了Windows下使用winsocket2函数库进行socket编程的基本步骤,涵盖了从创建socket到使用bind、listen、accept和connect函数建立连接的过程。还详细讲解了sockaddr结构、timeval结构以及select函数的用法,提供了相关函数的语法、参数和返回值解析,是Windows平台socket编程的实用参考。
摘要由CSDN通过智能技术生成

socket 编程

winsocket2 函数库

语法

SOCKET WSAAPI socket(
  int af,
  int type,
  int protocol
);

参数

  • af地址簇规范
    当前支持的值是AF_INET或AF_INET6,它们是IPv4和IPv6的Internet地址系列格式。( The values currently supported are AF_INET or AF_INET6, which are the Internet address family formats for IPv4 and IPv6.),
    常用的地址簇:
AF Meaning
AF_UNSPEC 0 The address family is unspecified.
AF_INET 2 The Internet Protocol version 4 (IPv4) address family.
AF_INET6 23 The Internet Protocol version 6 (IPv6) address family.
  • type 新套接字的类型规范。

windows socket 2支持的type参数(部分)

Type Meaning
SOCK_STREAM 1 一种套接字类型,提供带有OOB数据传输机制的顺序,可靠,双向,基于连接的字节流。 此套接字类型使用传输控制协议(TCP)作为Internet地址系列(AF_INET或AF_INET6)。
SOCK_DGRAM 2 一种支持数据报的套接字类型,它是固定(通常很小)最大长度的无连接,不可靠的缓冲区。 此套接字类型使用用户数据报协议(UDP)作为Internet地址系列(AF_INET或AF_INET6)。
SOCK_RAW 3 一种套接字类型,提供允许应用程序操作下一个上层协议头的原始套接字。 要操作IPv4标头,必须在套接字上设置IP_HDRINCL套接字选项。 要操作IPv6标头,必须在套接字上设置IPV6_HDRINCL套接字选项。
  • protocol协议

如果指定值0,则调用者不希望指定协议,服务提供者将选择要使用的协议。

common values for the protocol

返回值(Return Value)

如果没有错误发生,socket返回一个新套接字的描述符;如果发生错误,将返回INVALID_SOCKET,通过调用 WSAGetLastError,可以得到具体的错误代码。

demo实例

	#pragma comment(lib,"Ws2_32.lib")  //link Ws2_32.lib
	#include <winsock2.h>
	#include <ws2tcpip.h>
	#include <stdio.h>
	#include <stdlib.h>   // Needed for _wtoi
	int main(){
		WSADATA wsaData = {0};
		SOCKET sock = INVALID_SOCKET;
		int iFamily = AF_UNSPEC;
        int iType = 0;
        int iProtocol = 0;
	    iFamily = _wtoi(argv[1]);
	    iType = _wtoi(argv[2]);
	    iProtocol = _wtoi(argv[3]);
		int iReturn=0;
		// Initialize Winsock
		iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
		if (iResult != 0) {
	        wprintf(L"WSAStartup failed: %d\n", iResult);
	        return 1;
	    }
	    socket=socket(iFamily,iType,iProtocol);
	    if (sock == INVALID_SOCKET) 
	        wprintf(L"socket function failed with error = %d\n", WSAGetLastError() );
	    else {
	     
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值