网络编程——基于TCP的程序设计和基于UDP的程序设计

    网络编程可分为基于TCP的网络程序设计和基于UDP的网络程序设计。TCP是基于字节流的面向连接的,常用于可靠的网络传输,而UDP是基于数据报的无连接的网络传输,常用语即时通信。

    无论是基于TCP或者是基于UDP的程序设计,它都是有固定的步骤可循的。只要理解这些步骤,实现起来也是比较简单的。下面将介绍基于TCP和UDP的网络编程的详细步骤以及实现实例。

    在介绍网络编程之前,首先要说明一点:Winsock函数是Windows提供的网络编程的借口,无论是基于TCP的还是UDP的网络编程,在程序设计之前,都要首先加载Winsock库。

一、基于TCP的网络应用程序

    网络应用程序都是基于C/S(客户端/服务器)模式的,因此在进行网络应用程序开发时,不仅要开发服务器应用程序也要开发客户端应用程序。开发服务器应用程序和客户端应用程序在步骤上略有不同。下面介绍一下基于TCP的网络应用程序开发的详细步骤:

服务器端应用程序:                                                                  客户端应用程序:

1、创建socket套接字                                                                1、创建socket套接字

2、将套接字绑定(bind)到指定的本机IP地址和端口上           

3、将套接字设为监听模式(listen),准备接受客户端的请求                   2、向服务器发送连接请求(connect)

4、等待客户端请求的到来(accept),并返回新的套接字进行通信

5、服务器和客户端相互通信(send/recv)                                         3、服务器和客户端相互通信(send/recv) 

6、返回继续等待新的客户端请求到来

7、关闭socket套接字                                                                  4、关闭socket套接字

注释:服务器要绑定端口,监听客户端请求,当接受到请求后才开始通信。而客户端只需要先发送请求,只要请求被接收后就可以通信了。

在理解示例代码之前,先介绍一些知识点和函数:

第一点:在网络编程中,要用到IP地址和端口号,比如在bind()和accept()函数中都需要有到IP地址和端口号,在Windows API中有一个SOCKADDR_IN结构体中可以保存IP地址和端口号的信息。

第二点:服务器要绑定的IP地址应该用(INADDR_ANY)属性,表示服务器可以接受任何端口发送来的连接请求,这是因为有的机器可能有多个网卡,因此可能有多个IP地址,这样设定可以方便后面的程序开发。

第三点:网络通信中用到的是网络字节序,intel的机器本机字节序和网络字节序的存放格式是不一样的,所以要用想用的函数进行转化。

inet_addr()将点分十进制的IP地址转化为u_long型

inet_ntoa()将in_addr结构类型的参数转化为点分十进制的IP地址

htonl()将u_long型的IP地址从主机字节序转换为网络字节序

htons()将u_short型的IP地址从主机字节序转换为网络字节序

第四点:网络编程要用到Winsock库,,所以不仅要加载winsock的头文件,并且要绑定ws2_32.lib动态链接库。绑定动态链接库有两种方法。第一种就是在工程的“属性”里设置“Link”的链接库加上ws2_32.lib就可以了。第二种方法就是在工程的源文件中加上代码:#pragma comment(lib,"ws2_32.lib")就可以了。

 /**************************************************************
                       基于TCP的服务器应用程序示例代码
 ****************************************************************/

#include "stdafx.h"
#include <stdlib.h>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值