计算机科学与技术之网络编程 Windows下VC6.0 网络SOCKET编程C语言实现(服务端)

发布时间 2023-11-21 17:36:49作者: 无名量

VC6.0平台用C语言实现网络SOCKET通信

一.VC6.0平台创建Win32 Console Application工程

  1. 工程名称自拟(或输入firstSocket
  2. 添加新建项文件C++ Source File  
  3. 文件名自拟,后缀.c (firstSocket.c)
  4. firstSocket.c 加入头文件#include <winsock2.h>
  5. 链接动态库#pragma comment (lib,"ws2_32.lib")

 

二.基于SOCKET通信基本原理

SOCKET是外文名称,意思是插座、插孔、窝;槽;套筒等,中文名通常称为“套接字”。SOCKET通信原理按以下几个函数顺序实现:

1、操作系统提供一个socket函数用来创建SOCKETsocket函数需要传递通信协议族和套接字的类型参数,也就是表明将要创建的什么样的SOCKET(套接字).

2、bind函数将地址信息绑在socket函数创建好的SOCKET上。

3、接着调用Listen函数监听包含地址信息的SOCKET,并提供连接的队列数量。Listen函数的监听工作由操作系统来完成。

4、有客户端来连接,操作系统就调用一直在等待的accept函数来接收,accept函数执行成功就会返回一个客户端套接字(CLIENT),这个套接字包含连接来的客户端的地址信息。

5、接着就可以通过这个客户端套接字来获取发送过来的信息或者发送信息给客户端

 

简单服务端的代码:

//server

 

#include <stdio.h>

#include <winsock2.h>

#pragma comment (lib,"ws2_32.lib")

int main()

{

WSADATA wsaData;

SOCKET SSock,CSock;

SOCKADDR_IN sAddr,cAddr;

int szCAddr;

char message[]="Hello Client!";

WSAStartup(MAKEWORD(2,2),&wsaData);//

SSock= socket(PF_INET,SOCK_STREAM,0);// PF_INET IP4协议族,类型是SOCK_STREAM

memset(&sAddr,0,sizeof(sAddr));  //初始化地址信息

servAddr.sin_family=AF_INET;

servAddr.sin_addr.s_addr=htonl(INADDR_ANY);

servAddr.sin_port=htons(55555);

bind(SSock,(SOCKADDR*)&sAddr,sizeof(sAddr);//绑定服务端地址信息

listen(SSock,5);//监听

 

szCAddr= sizeof(cAddr);

CSock= accept(SSock,(SOCKADDR*)&cAddr,&szCAddr);//接收连接,返回客户端套接字

send(CSock,message,sizeof(message),0);//基于客户端套接字把信息发往客户端

closesocket(CSock);

closesocket(SSock);

WSACleanup();

return 0;

}

三、基于SOCKET编程还涉及到的内容

1、网络数据传输序列:大端和小端htonl

2、地址信息的结构体SOCKADDR_IN

3、套接字协议和类型的设置

4、Winsock的初始化WSAStartup(MAKEWORD(2,2),&wsaData)

5、各种I/O模式