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. Unity3D之C# yield waitforseconds

    Wait for seconds requires a couple things in order to work properly and chances are if it's not work ...

  2. Asp.net MVC 数据注解与验证

    数据注解特性定义在名称空间System.ComponentModel.DataAnnotations中(有些特性定义在其他名称空间中),它们提供了服务器端验证的功能,当在模型的属性上使用这些特性时,框 ...

  3. mac idea中 maven项目添加的时候没有java文件

    file --other setting --maven  选中第二项即可  apply下

  4. STM32F之IAR6.5 J-Link程序下载错误

    错误01:Keil环境下使用J-Link SW模式下载程序,而IAR6.5则出现如图1-1的错误.

  5. javascript的实践

    jQuery增强了css的选择器功能,是一个简洁快速的脚本库,能够使用短小的代码实现复杂的网页预览效果.如实现表格奇偶行异色 <script language="javascript& ...

  6. asp.net mvc api auth

    一.登录 /// <summary> /// 获取令牌 /// </summary> /// <param name="userName">用户 ...

  7. 不管你以后写不写JS,都应该学会这种思考方式

    昨天在网上看到了一篇文章说程序员写不过35这种说法,但事实上,确实并不能每个人都像我一样,在写JS中找到乐趣,就乐意写这东西直到50岁眼瞎为止. 那肯定有人要问,也许我不仅写JS写不到35,可能我连3 ...

  8. LeetCode Rotate List

    struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution ...

  9. 【转】VS2010安装后出现无法使用帮助的解决方案

    安装完VS2010后 再安装MSDN 打开“Help Library 管理器 - Microsoft Help 查看器 1.0” 提示“请为本地内容选择位置” 默认的位置是在“C:/Documents ...

  10. Android 简易崩溃日志保存

    仅仅做了简单的保存到了本地而已: 根据需要可以继续增加功能: 下一次启动上传到服务器: 增加应用版本,机型系统版本信息等: public class CrashSaver { public stati ...