【windows socket编程+服务器客户端】

Windows Socket编程与服务器客户端示例

Winsock是 Windows下套接字标准

Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能。如下图:

套接字通过IP地址,Port端口号标识,通过这个标识可以在整个局域网定位一个套接字,通过套接字进程便可以相互传输数据。如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,端口号唯一标识的套接字,进程B同样创建一个有IP地址,端口号唯一标识的套接字,进程A,B便可以通过对方套接字发送与接收信息。

1.库支持:

Winsock
API 函数由WS2_32.DLL支持,可通过WS2_32.LIB访问。Windows socket编程前需要初始化WS2_32.DLL,通过han函数WSAStartup完成初始化。

#include <winsock2.h>

#pragma comment(lib,"ws2_32.lib")  //静态加载ws2_32.lib

WS2_32.DLL 初始化:

         intWSAStartup(WORD wVersionRequested,LPWSADATA
lpWSAData);

         该函数第一个参数为WS2_32.DLL版本,通常设为MAKEWORD(2,0),第二个参数为一个指向WSADATA的指针,用于返回WS2_32.DLL的配置信息。Socket编程前需要调用该函数。

WS2_32.DLL 释放:

        int  WSACleanup(
);

该函数用于释放WS2_32.DLL,不需要Winsock功能时调用该函数。

2.基本API函数:

创建socket:

         SOCKETsocket (int af, int type,
int protocol);

         第一个参数af:  表示族地址,一般使用AF_INET宏。

         第二个参数type:  表示连接类型,可选面向连接SOCK_STREAM,数据报SOCK_DGRAM。一般使用SOCK_STREAM。

         第三个参数protocol:  表示协议,在使用AF_INET时,设为IPPROTO_TCP。

绑定socket:

         intbind(SOCKET
s, const struct sockaddr *saddr,int namelen);

         第一个参数:  需要绑定的socket。

         第二个参数:  一般使用struct sockaddr_in包含协议,IP,端口等信息。

         第三个参数:  一般使用struct sockaddr_in结构大小。

         该函数将socket与协议,IP,端口号绑定起来,相对于给socket“命名”唯一的标识,这样其他的进程就可以通过这个标识找到这个socket。

监听socket:

          intlisten(SOCKET
s,  int nQueueSize);

          第一个参数:  监听的socket。

          第二个参数:  套接字监听队列最大连接请求数。

          该函数将监听对socket的连接请求。

请求连接:

          intconnect(SOCKET
s,const struct sockaddr *saddr,int namelen) ;

          第一个参数:  socket本地进程的socket。

          第二个参数:  对方IP,端口等socket地址标识sockaddr_in。

          第三个参数:  sockaddr_in结构大小。

接受连接请求:

          SOCKETaccept(SOCKET
s,  struct sockaddr  *addr,  int  *addrlen);

          第一个参数:  socket为被监听的socket。

          第二个参数:  一个sockaddr指针,将写入发送请求方的sockaddr_in信息。

          第三个参数:  sockaddr_in结构体的大小。

          该函数用于接受一个socket连接请求,返回一个新的连接socket(实质是请求方的socket),发送与接收数据通过这个连接套socket。

发送数据:

int send(SOCKET
s, const char *buf,  int len, int flags );

 
        第一个参数:  socket为对方的socket。

 
        第二个参数:  发送数据的缓冲区。

 
        第三个参数:  数据缓冲区大小。

 
        第四个参数:  紧急状态,一般这为0。

 
        该函数用于向对方socket发送数据,成功返回发送数据的大小数。

发送数据:

int recv(SOCKET
s, char *buf,  int len,  int flags);

          第一个参数:  socket为对方的socket。

          第二个参数:  接收数据的缓冲区。

          第三个参数:  缓冲区大小。

          第四个参数:  紧急状态,一般这为0。

          该函数用于接收对方发送的数据,成功返回发送数据的大小数。

关闭套接字:

          intclosesocket(SOCKET
s);

          参数为socket。

          该函数用于关闭套接字。

3.牛刀小试:

VC6.0中,先运行服务器程序,再打开一个VC6.0,运行客户端程序。

运行效果:

服务器端程序:

客户端程序:

【windows socket编程+服务器客户端】,布布扣,bubuko.com

时间: 2024-11-15 08:10:16

【windows socket编程+服务器客户端】的相关文章

【windows socket+HTTP服务器客户端】

Windows Socket+HTTP服务器客户端 Winsock是 Windows下套接字标准.                 1.HTTP协议:          HTTP是基于客户端/服务器的请求,响应协议.        请求:由客户端向服务器发起,指定了要从服务器获取的资源.请求包含了协议首部,指明了客户端处理能力信息,如可以处理的文件类型,支持的语言,编码方式等.        响应:服务器收到客户端的请求后,解析这个请求,构造响应,并发送给客户端.响应同样包含了协议首部,指明了服

【windows socket+UDP服务器客户端】

Windows Socket+UDP服务器客户端 Winsock是 Windows下套接字标准.                    1.UDP socket编程:          UDP(用户数据报协议)是一个无连接,不可靠的数据传输,其特点是简单,快捷.相比与TCP,UDP不需要建立连接(不需connect.accept函数),数据发送接收之后,不需要终止连接.基于UDP的程序,避免了TCP运行的开销,在效率与速度上具有更好的表现.          UDP是无连接的,可能会有数据的丢失

Windows Socket 编程_单个服务器对多个客户端简单通讯

单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题 一.简要说明: 程序名为:TcpSocketOneServerToMulClient 程序功能:实现单个服务器对多个客户端通讯功能的小程序. PS: 这是继上次简单的 Tcp Windows Socket 编程后的再一程序,程序实现依然不是很严谨,还待完善~ 二.查看效果: 三.编写思路: 由上一次的程序思路来看,如果想实现单个服务器对多个客户端程序的通讯的话,这次程序编写尝试从多线程的角度来考

Windows Socket编程示例-TCP示例程序

前面一部分是介绍,后面有示例 1.网络中进程之间如何通信? 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. 使用TCP

Java 利用 Socket 实现服务器客户端聊天

Socket是网络编程中最基本的通信接口,常用的网络辅助类,比如URL等之类,其底层还是基于Socket来实现的. 而Socket,形象来说,就是连接通信的两端,比如这样 S<==>S,中间的通道就是网络了,而简单地利用Socket,我们就可以来实现一个简单的聊天功能 具体效果看下图: 这只是在本地中试用的效果,如果加上UI界面,其实就可以做成一个聊天的小应用了. 1. Server 端主要是利用ServerSocket的accept方法来等待客户端的连接,如果客户一直没有连接,则会在这里等待

Windows Socket编程--ip地址转换

在Windows Socket编程中,需要将ip地址在网络字节顺序与主机字节顺序之间进行转换,该过程的代码如下: 1 #include <Winsock2.h> 2 #include <Ws2tcpip.h> //为了使用inet_pton()和inet_ntop()函数 3 #include <iostream> 4 5 #pragma comment(lib,"ws2_32.lib") //socket编程需要引用该库 6 7 using std

python socket编程之客户端和服务端简单交互

服务端 #_*_ coding:utf-8 _*_ #导入socket模块 import socket # 创建socket对象 sk = socket.socket() #绑定侦听的IP和端口号 ip_port = ('192.168.9.213',9999) sk.bind(ip_port) #最大连接数 sk.listen(5) #接受请求,接受请求的时候可以获取到客户端的socket对象,以及客户端的IP和端口 #通过while循环,让服务端一直接受客户端请求 print "正在等待客户

Windows Socket 编程_ 简单的服务器/客户端程序

转载自:http://blog.csdn.net/neicole/article/details/7459021 一.程序运行效果图 二.程序源代码 三.程序设计相关基础知识 1.计算机网络    2.IP地址    3.协议    4.网络体系结构    5.TCP/IP体系结构与特点    6.客户机/服务器模式    7.TCP/IP特点    8.套接字的引入    9.面向 连接/无连接 的套接字的系统调用时序图/流程图 一.程序运行效果图 二.程序源代码 [cpp] view pla

Windows Socket 编程:TCP客户端

#include <stdio.h> #include <stdlib.h> #include <winsock2.h> int main(int argc,char * argv[]) { char message[30]; WSADATA wsaData; SOCKET hSocket; SOCKADDR_IN servAddr; WSAStartup(MAKEWORD(2,2),&wsaData); hSocket = socket(PF_INET,SOC