TCP网络程序实例——服务器端与客户端交互
|
实例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网络程序实例——服务器端与客户端交互的更多相关文章
- TCP网络协议通信原理(客户端和服务器端)
下面直接用代码来说明TCP协议的基础知识: 服务器端代码块: from socket import * from time import ctime ''' 指定主机地址.工作端口号.接收缓存的长度 ...
- UDP网络程序实例
根据前面所讲的网络编程的基础知识,以及UDP网络编程的特点,下面创建一个广播数据报程序.广播数据报是一种较新的技术,类似于电台广播,广播电台需要在指定的波段和频率上广播信息,收听者也要将收音机调到指定 ...
- Java 之 TCP 通信程序
一.概述 TCP 通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server). 两端通信时步骤: 1.服务端程序,需要事先启动,等待客户端的连接: 2. ...
- 如何编写一个稳定的网络程序(TCP)
本节我们看一下怎样才能编写一个基于TCP稳定的客户端或者服务器程序,主要以试验抓包的方式观察数据包的变化,对网络中出现的多种情况进行分析,分析网络程序中常用的技术及它们出现的原因,在之后的编程中能早一 ...
- 服务器端与客户端TCP连接入门(一)
Java中使用Socket(即套接字)完成TCP程序的开发 服务器端使用ServerSocket接收客户端的连接请求,每一个客户端都使用一个Socket对象表示 在服务器端每次运行时都要使用accep ...
- 【unix网络编程第三版】阅读笔记(四):TCP客户/服务器实例
本篇博客主要记录一个完整的TCP客户/服务器实例的编写,以及从这个实例中引发的对僵死进程的处理等问题. 1. TCP客户/服务器功能需求 本实例完成以下功能: (1) 客户从标准输入读入一行文本,并写 ...
- TCP服务器端和客户端程序设计【转】
本文转载自:http://blog.csdn.net/yueguanghaidao/article/details/7035248# 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.实验目的 ...
- C++网络套接字编程TCP和UDP实例
原文地址:C++网络套接字编程TCP和UDP实例作者:xiaojiangjiang 1. 创建一个简单的SOCKET编程流程如下 面向有连接的套接字编程 服务器: 1) 创建套接字(so ...
- Linux网络编程:基于TCP的程序开发回顾篇《转》
面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有.可随着时间的推移,你 ...
随机推荐
- CodeSmith(C#)简单示例及相关小知识
// 本文将介绍CodeSmith与数据库进行交互生成相应的存储过程,本例使用的数据库为SQL Server 2000. // 在与数据库进行交互时,我们使用到了一个CodeSmith自带的组件Sch ...
- MySQL(十三)之MySQL事务
前言 这段时间自己会把之前学的东西都总结一遍,希望对自己以后的工作中有帮助.其实现在每天的状态都是很累的,但是我要坚持! 进入我们今天的正题: 为什么MySQL要 有事务呢?事务到底是用来干什么的?我 ...
- vDSP加速的应用
vDSP 是IOS提供一系列加速处理算法..在优化时可以考虑应用一二... 1.在项目中加入Accelerate.framework库 点开项目属性->Build Phases->Link ...
- 小星星的php
大家好,我是小星星,最近新学的php,我迫不及待要跟大家分享了!!come on!一起来看小星星的世界 先为大家介绍php基础 首先我们来看看什么叫php: PHP(外文名:PHP: Hypertex ...
- PHP5.6+7代码性能加速-开启Zend OPcache-优化CPU
说明 PHP 5.5+版本以上的,可以使用PHP自带的opcache开启性能加速(默认是关闭的).对于PHP 5.5以下版本的,需要使用APC加速,这里不说明,可以自行上网搜索PHP APC加速的方法 ...
- ajax上传图片的本质
1.图片上传到服务器. 2.后台将图片地址传到html页面,以图片形式展现. 3.后天将图片地址加入到input表单中,表单处于隐藏状态. 4.前端删除图片,通过js操作,移除图片与表单数据. 5.图 ...
- react-native绑定优酷SDK播放视频-附效果和git源码
ReactNative绑定优酷SDK需要用到两部分知识: 优酷本身的sdk绑定: RN与原生界面的交互: 效果: RN版本:0.49.3 代码更新日期:2017.10.26 下文也根据绑定优酷需要的两 ...
- 双向链表--Java实现
/*双向链表特点: *1.每个节点含有两个引用,previos和next,支持向前或向后的遍历(除头节点) *2.缺点插入或删除的时候涉及到引用修改的比较多 *注意:下面的双向链表其实也实现了双端链表 ...
- Matrices and Vectors
Matrices and Vectors Matrices are 2-dimensional arrays: A vector is a matrix with one column and man ...
- 如何线上部署node.js项目
来源:http://blog.csdn.net/chenlinIT/article/details/73343793 前言 最近工作不是很忙,在空闲时间学习用node+express搭建自己的个人博客 ...