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. python导入cx_Oracle报错的问题!

    import cx_Oracle 总是报错:ImportError: DLL load failed: 找不到指定的模块. 或者:ImportError: DLL load failed: %1 不是 ...

  2. Java 设计模式学习

    看完headfirst设计模式,简单总结一下. 写在最前面:设计模式的关心的问题为"弹性.易于维护.易于扩展",通过对模式的应用,让自己的代码能够得到良好的可塑性.但是个人认为不能 ...

  3. hive问题整理(待续)

    本人对hadoop生态系统的环境搭建.配置相关再熟悉不过了,周末刚测试过oozie相关的 今早使用hive,报错: Exception in thread "main" java. ...

  4. JAVA中SERIALVERSIONUID的解释

    serialVersionUID作用:        序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性.有两种生成方式:       一个是默认的1L,比如:private st ...

  5. 更新App版本的流程

    上班一年了还没有自己打包上传过APP,周五下班时项目经理手把手教了我一遍,我大致把流程在这里回顾一下: 1.首先要将svn上的代码拷贝一份到分支上,用终端操作:svn cp https://192.1 ...

  6. iOS 8 TabBar 图片显示真实颜色

    “展信颜开” 我怎么想到这个词了呢……因为这个足以表达我现在的心情,有解决了一个问题,有了一个收获. 早上小伙伴问我“用自带的tab改图的颜色他会不显示?改tabitem.”我记得是可以显示的,但是他 ...

  7. Android高效加载大图、多图解决方案,有效避免程序OOM

    高效加载大图片 我们在编写Android程序的时候经常要用到许多图片,不同图片总是会有不同的形状.不同的大小,但在大多数情况下,这些图片都会大于我们程序所需要的大小.比如说系统图片库里展示的图片大都是 ...

  8. jsp 动态包含和静态包含

    jsp其实就是一个servlet或者说一个java文件,做这样三件事:打印html标签到页面,处理逻辑,输出结果 现在有两个jsp文件,包含者1和被包含者2 静态包含,就是把2的java代码塞到1的代 ...

  9. shell 简单计算脚本

  10. Android 数据库管理— — —创建数据库

    <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android=" ...