实例02

客户端/服务器的交互

实例位置:光盘\Code\SL\14\02

视频位置:光盘\Video\14\

◆ 服务器端

创建服务器端项目Server,在Main方法中创建TCP连接对象;然后监听客户端接入,并读取接入的客户端IP地址和传入的消息;最后向接入的客户端发送一条信息。代码如下:

01    namespace Server

02    {

03        class Program

04        {

05          static void Main()

06          {

07              int port = 888;                                               //端口

08              TcpClient tcpClient;                                          //创建TCP连接对象

09              IPAddress[] serverIP = Dns.GetHostAddresses("127.0.0.1"); //定义IP地址

10              IPAddress localAddress = serverIP[0];                       //IP地址

11              TcpListener tcpListener = new TcpListener(localAddress, port);//监听套接字

12              tcpListener.Start();                                         //开始监听

13                Console.WriteLine("服务器启动成功,等待用户接入…");          //输出消息

14                while (true)

15                {

16                    try

17                    {

18                        //每接收一个客户端则生成一个TcpClient

19                      tcpClient = tcpListener.AcceptTcpClient();

20                      NetworkStream networkStream = tcpClient.GetStream();//获取网络数据流

21                      //定义流数据读取对象

22                      BinaryReader reader = new BinaryReader(networkStream);

23                      //定义流数据写入对象

24                      BinaryWriter writer = new BinaryWriter(networkStream);

25                      while (true)

26                      {

27                          try

28                          {

29                              string strReader = reader.ReadString();//接收消息

30                              //截取客户端消息

31                              string[] strReaders = strReader.Split(new char[] { ' ' });

32                                //输出接收的客户端IP地址

33                                Console.WriteLine("有客户端接入,客户IP:" + strReaders[0]);

34                                //输出接收的消息

35                              Console.WriteLine("来自客户端的消息:" + strReaders[1]);

36                              string strWriter = "我是服务器,欢迎光临";//定义服务端要写入的消息

37                              writer.Write(strWriter);                  //向对方发送消息

38                          }

39                          catch

40                          {

41                              break;

42                          }

43                      }

44                  }

45                  catch

46                  {

47                      break;

48                  }

49                }

50            }

51        }

52    }

◆ 客户端

创建客户端项目Client,在Main方法中创建TCP连接对象,以指定的地址和端口连接服务器;然后向服务器端发送数据和接收服务器端传输的数据。代码如下:

01    namespace Client

02    {

03        class Program

04        {

05

06            static void Main(string[] args)

07          {

08              //创建一个TcpClient对象,自动分配主机IP地址和端口号

09              TcpClient tcpClient = new TcpClient();

10              //连接服务器,其IP和端口号为127.0.0.1和888

11              tcpClient.Connect("127.0.0.1", 888);

12              if (tcpClient != null)                                         //判断是否连接成功

13              {

14                  Console.WriteLine("连接服务器成功");

15                  NetworkStream networkStream = tcpClient.GetStream();   //获取数据流

16                  BinaryReader reader = new BinaryReader(networkStream); //定义流数据读取对象

17                  BinaryWriter writer = new BinaryWriter(networkStream); //定义流数据写入对象

18                  string localip="127.0.0.1";       //存储本机IP,默认值为127.0.0.1

19                  IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName()); //获取所有IP地址

20                  foreach (IPAddress ip in ips)

21                  {

22                      if (!ip.IsIPv6SiteLocal)                        //如果不是IPV6地址

23                          localip = ip.ToString();                    //获取本机IP地址

24                  }

25                  writer.Write(localip + " 你好服务器,我是客户端");  //向服务器发送消息

26                  while (true)

27                  {

28                      try

29                      {

30                          string strReader = reader.ReadString();   //接收服务器发送的数据

31                          if (strReader != null)

32                          {

33                              //输出接收的服务器消息

34                              Console.WriteLine("来自服务器的消息:"+strReader);

35                          }

36                      }

37                      catch

38                      {

39                          break;                 //接收过程中如果出现异常,退出循环

40                      }

41                  }

42              }

43              Console.WriteLine("连接服务器失败");

44            }

45        }

46    }

首先运行服务器端,然后运行客户端,运行客户端后后的服务器端效果如图14.12所示,客户端运行效果如图14.13所示。

  

图14.12  客户端运行后的服务器端效果                       图14.13  客户端运行效果

本文摘自明日科技出版的《零基础学C#》,转载请注明版权归属!!!

TCP网络程序实例——服务器端与客户端交互的更多相关文章

  1. TCP网络协议通信原理(客户端和服务器端)

    下面直接用代码来说明TCP协议的基础知识: 服务器端代码块: from socket import * from time import ctime ''' 指定主机地址.工作端口号.接收缓存的长度 ...

  2. UDP网络程序实例

    根据前面所讲的网络编程的基础知识,以及UDP网络编程的特点,下面创建一个广播数据报程序.广播数据报是一种较新的技术,类似于电台广播,广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定 ...

  3. Java 之 TCP 通信程序

    一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...

  4. 如何编写一个稳定的网络程序(TCP)

    本节我们看一下怎样才能编写一个基于TCP稳定的客户端或者服务器程序,主要以试验抓包的方式观察数据包的变化,对网络中出现的多种情况进行分析,分析网络程序中常用的技术及它们出现的原因,在之后的编程中能早一 ...

  5. 服务器端与客户端TCP连接入门(一)

    Java中使用Socket(即套接字)完成TCP程序的开发 服务器端使用ServerSocket接收客户端的连接请求,每一个客户端都使用一个Socket对象表示 在服务器端每次运行时都要使用accep ...

  6. 【unix网络编程第三版】阅读笔记(四):TCP客户/服务器实例

    本篇博客主要记录一个完整的TCP客户/服务器实例的编写,以及从这个实例中引发的对僵死进程的处理等问题. 1. TCP客户/服务器功能需求 本实例完成以下功能: (1) 客户从标准输入读入一行文本,并写 ...

  7. TCP服务器端和客户端程序设计【转】

    本文转载自:http://blog.csdn.net/yueguanghaidao/article/details/7035248# 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.实验目的 ...

  8. C++网络套接字编程TCP和UDP实例

    原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1.       创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1)  创建套接字(so ...

  9. Linux网络编程:基于TCP的程序开发回顾篇《转》

    面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有.可随着时间的推移,你 ...

随机推荐

  1. jquery各种事件使用方法总结(from:天宇之游)

    ps:本博客转自博主  天宇之游 ,地址:http://www.cnblogs.com/cwp-bg/  ,再次感谢天宇之游.jquery事件使用方法总结 一.鼠标事件1. click():鼠标单击事 ...

  2. 如何抽象一个 Vue 公共组件

    之前一直想写一篇关于抽象 Vue 组件的随笔,无奈一直没想到好的例子.恰巧最近为公司项目做了一个数字键盘的组件,于是就以这个为例聊聊如何抽象 Vue 的组件. 先上 Demo 与 源码.(demo最好 ...

  3. 图片首尾平滑轮播(JS原生方法—节流)<原创>

    首先给出HTML代码,要注意轮播图片表(#list)末尾加上第一个图片1.jpg,在首部加上最后一个图片5.jpg. <!DOCTYPE html> <html lang=" ...

  4. springMvc+hibernate的web application的构建

    闲来没事,想整理下一些知识. 这篇文章是关于spring的web程序的搭建,有什么不对的地方希望大家批评指正. 首先我们要了解什么是spring,这里可能很多大家也都明白,无非是一个管理对象的一个容器 ...

  5. 张高兴的 Xamarin.Android 学习笔记:(三)活动生命周期

    本文将直接解释我写的一个示例.示例目的在于展示 Android 活动在 Xamarin 中的用法.如果有朋友对基础知识不太了解建议先学 Android . 新建一个 Xamarin.Android 项 ...

  6. 自学jQueryMobile之简单创建页面

    首先简答介绍一下JQueryMobile吧,我觉得用一句话来讲就是可以 "写更少的代码,做更多的事情" : 它可以通过一个灵活及简单的方式来布局网页,且兼容所有移动设备.这也是我自 ...

  7. 接口测试思路,jmeter,接口测试流程

    接口测试总结 一:接口测试思想 接口测试:通过向服务器端发送请求,获取响应与预期结果做对比的一种服务端黑盒测试过程. 解释:接口就是将浏览器,客户端,手机端,或者服务器调用另一个服务器的请求抽离出来测 ...

  8. Servlet 笔记-读取表单数据

    Servlet 处理表单数据,这些数据会根据不同的情况使用不同的方法自动解析: getParameter():您可以调用 request.getParameter() 方法来获取表单参数的值. get ...

  9. 如何内网搭建NuGet服务器

    NuGet 是.NET程序员熟知的给.NET项目自动配置安装library的工具,它可以直接安装开源社区中的各个公用组件,可以说是非常方便.不过,有些时候,公司内部的公用的基础类库,各个项目都有引用, ...

  10. JS框架设计读书笔记之-选择器引擎01

    选择符 选择符是指CSS样式规则最左边的部分,例如 p{},#id{},.class{},p.class{} 等等 总共可以分为四大类: 并联选择器 => 逗号 => $('div,spa ...