HelloServer是一个在1234端口监听的服务端程序,它接受客户送来的数据,并且把这些数据解释为响应的ASCII字符,再对客户做出类似“Hello,...!"这样的响应。以下是HelloServer的代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text; namespace HelloServer
{
class Program
{
static void Main(string[] args)
{
string host = "localhost";
IPAddress ip = Dns.Resolve(host).AddressList[];
int port = ;
TcpListener lst = new TcpListener(ip,port);
//开始监听
lst.Start(); //进入等待客户的无限循环
while (true)
{
Console.Write("等待连接。。。。");
TcpClient c = lst.AcceptTcpClient(); Console.WriteLine("客户已连接");
NetworkStream ns = c.GetStream();
//获取客户发来的数据
byte [] request = new byte[];
int bytesRead = ns.Read(request, , request.Length);
string input = Encoding.ASCII.GetString(request, , bytesRead); Console.WriteLine("客户请求:{0}",input); //构造返回数据
string output = "Hello, " + input + "!";
byte[] hello = Encoding.ASCII.GetBytes(output);
try
{
ns.Write(hello,,hello.Length);
ns.Close();
c.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
lst.Stop();
}
}
}

编译之后运行,程序会显示如下:

输出结果

等待连接。。。。

这时服务程序已经进入了等待连接的循环。如果不关闭控制台端口,这个程序会一直等待。

现在编写客户端程序HelloClient,客户端代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text; namespace HelloClient
{
class Program
{
static void Main(string[] args)
{
try
{
string host = "localhost";
int port = ;
TcpClient c = new TcpClient(host,port);
NetworkStream ns = c.GetStream();
//构造请求数据
string output = "reader";
byte[] name = Encoding.ASCII.GetBytes(output);
ns.Write(name,,name.Length);
byte [] response = new byte[];
//读取服务器响应
int bytesRead = ns.Read(response, , response.Length);
Console.WriteLine(Encoding.ASCII.GetString(response,,bytesRead));
c.Close();
}
catch (Exception e)
{ Console.WriteLine(e.ToString());
}
}
}
}

输出结果

Hello,Reader!

而在服务端,输出变成了

输出结果

等待连接。。。。客户已连接

客户请求:Reader

等待连接。。。。

记住先开启服务端,在开启客户端的请求。不然会报错!

截图看运行结果

使用TCP的HelloServer的更多相关文章

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

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

  2. Unity Socket TCP

    using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Net.Sock ...

  3. Tcp/ip 报文解析

    在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...

  4. C#高性能TCP服务的多种实现方式

    哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...

  5. Android实现TCP断点上传,后台C#服务实现接收

    终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证, ...

  6. 漫谈TCP

    不得不承认,tcp是一个非常复杂的协议.它包含了RFC793及之后的一些协议.能把tcp的所有方面面面具到地说清楚,本身就是个很复杂的事情.如果再讲得枯燥,那么就会更让人昏昏欲睡了.本文希望能尽量用稍 ...

  7. 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  8. TCP/IP基础

    TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...

  9. TCP/IP之TCP_NODELAY与TCP_CORK

    TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...

随机推荐

  1. 3、Android Intent Flag的介绍

    介绍:http://blog.csdn.net/luckily01/article/details/7737499

  2. centos7安装

    1.准备工具 VMware,我用的是 VMware11 2.打开VMware,创建新的虚拟机 3.选择典型-->下一步 4.稍后安装操作系统-->下一步 5.选择linux操作系统,lin ...

  3. css3的3D和2D

    css3的3D旋转:rorateX():参数为正值时,盒子是围绕x轴,完成从Y轴正方向到Y轴负方向的旋转,视觉上呈现高度上的变化.rorateY():参数为正值时,盒子是围绕Y轴,完成从X轴正方向到X ...

  4. 移动测试主要使用的测试框架,基于python

    1.uiautomator google自己的测试框架,可以跨应用测试, 语言支持java,python也可以在GitHub上找到封装的包,去调用uiautomator. 2.Robotium jav ...

  5. jQuery从无知到无所不知

    说明: 本文以读书笔记的方式整理jQuery的重要知识点,言简意赅,一语中的,删繁就简,引人入胜. 本文先对jQuery强大的功能作一系统的介绍,再详细整理jQuery的选择器.过滤器.DOM操作.事 ...

  6. Cookies的作用

    Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookies就是服务器暂存放在你的电脑里的资料(.tx ...

  7. OC calendar 实践中的那些坑

    博客已经迁移到www.chjsun.top 最近想做一个万年历似的东西,因为需要把农历也添加进去,就想直接调用苹果自带的api,这样还方便一些, 搜索了一下,苹果对于时间的处理,还是提供了很多选择给我 ...

  8. LeetCode 094 Binary Tree Inorder Traversal

    方法一:(递归) class Solution { public: vector<int> inorderTraversal(TreeNode* root) { vector<int ...

  9. Android 开发常用命令

    1.生成keystore文件 keytool -exportcert -keystore keystore_path -list -v 2.查看APK签名 keytool -list -printce ...

  10. Exchange 基本命令累计

    Get-ExchangeServer | fl name,edition,admindisplayversion  //查看exchange服务器版本