C语言学习日记(yzy):socket(TCP)网络连接

    xiaoxiao2021-12-14  18

    在学习socket之前,需要了解socket连接的流程和结构,简单介绍一下流程:首先:创建套接字socketServer  - ->  绑定端口bind() - -> 监听套接字,阻塞等待客户端的连接,

    然后客户端也创建套接字socketClient - -> 设置connect()方法 - -> 接着客户端和服务器可进行读写操作来传送信息,方法为recv()和send()。

    在socket开发中WSA(WEB SERVER API )是非常重要的API。

    以服务器为例子

    首先,初始化WSA:int WSAStartup(WORD,&WSADATA)--> WORD(version = MAKEWORD(1,1)) ,WSADATA(wsaData),WSAStartup == 0 时初始化成功

    LOBYTE(wsaData.wVersion) ==1||HIBYTE(wsaData.wVersion)==1查找是否有可用的WinSock DLL 

    SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);创建套接字

    SOCKADDR_IN  addrSrv 得作用为添加端口和地址 -->addrSrv.sin_addr.S_un.S_addr=inet_addr(IP);添加服务器IP地址,addrSrv.sin_family=AF_INET;地址协议族

    ,addrSrv.sin_port=htons(6000);设置端口地址

    connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))连接服务器//绑定端口,最后进行读写操作。recv(SOCKET S,char buf[](缓冲),int len(buf长

    度),int flags(一般置零))send(SOCKET S,char buf[](缓冲),int len(buf长度),int flags(一般置零))

    需要的头文件和库文件: <winsock2.h> ~ <stdio.h> ~ <string.h>  ~ ws2_32.lib

    实例:socketClient.cpp:

    void main() { WORD version = MAKEWORD(1,1);; WSADATA wsaData; SOCKET sockClient; SOCKADDR_IN addrSrv; char recvBuf[100]; char sendBuf[100]; if(WSAStartup(version,&wsaData) != 0){ printf("init the WSA fail"); return; } if(LOBYTE(wsaData.wVersion) !=1||HIBYTE(wsaData.wVersion)!=1){ printf("Lack the WinSock DLL"); //WSACleanup(); return; } sockClient = socket(AF_INET,SOCK_STREAM,0);//creat socket addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addrSrv.sin_family=AF_INET; addrSrv.sin_port = htons(6000); connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); recv(sockClient,recvBuf,100,0); printf("%s\n",recvBuf); gets(sendBuf); send(sockClient,sendBuf,sizeof(sendBuf),0); }

    end

    转载请注明原文地址: https://ju.6miu.com/read-963490.html

    最新回复(0)