使用TCP的HelloServer
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的更多相关文章
- 服务器端与客户端TCP连接入门(一)
Java中使用Socket(即套接字)完成TCP程序的开发 服务器端使用ServerSocket接收客户端的连接请求,每一个客户端都使用一个Socket对象表示 在服务器端每次运行时都要使用accep ...
- Unity Socket TCP
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.Net.Sock ...
- Tcp/ip 报文解析
在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...
- C#高性能TCP服务的多种实现方式
哎~~ 想想大部分园友应该对 "高性能" 字样更感兴趣,为了吸引眼球所以标题中一定要突出,其实我更喜欢的标题是<猴赛雷,C#编写TCP服务的花样姿势!>. 本篇文章的主 ...
- Android实现TCP断点上传,后台C#服务实现接收
终端实现大文件上传一直都是比较难的技术,其中涉及到后端与前端的交互,稳定性和流量大小,而且实现原理每个人都有自己的想法,后端主流用的比较多的是Http来实现,因为大多实现过断点下载.但稳定性不能保证, ...
- 漫谈TCP
不得不承认,tcp是一个非常复杂的协议.它包含了RFC793及之后的一些协议.能把tcp的所有方面面面具到地说清楚,本身就是个很复杂的事情.如果再讲得枯燥,那么就会更让人昏昏欲睡了.本文希望能尽量用稍 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- TCP/IP基础
TCP/IP 是用于因特网 (Internet) 的通信协议. 计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述. 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的 ...
- TCP/IP之TCP_NODELAY与TCP_CORK
TCP/IP之Nagle算法与40ms延迟提到了Nagle 算法.这样虽然提高了网络吞吐量,但是实时性却降低了,在一些交互性很强的应用程序来说是不允许的,使用TCP_NODELAY选项可以禁止Nagl ...
随机推荐
- 用PowerMock mock final类constructors
也相对简单,直接贴代码 被测方法 public class EmployeeServiceWithParam { public void createEmployee(final Employee e ...
- 与焊接厂交流——从生产角度出发的PCB设计心得
上周的时候,去了趟加工厂盯电路板的焊接进度.然后在闲余的时候,跟焊接厂的工程师交流了一下,工程师从生产的角度,说了几个值得注意的事项: 1.元件的焊盘应该要窄长,不能过宽.因为,在过机表贴时,焊盘上的 ...
- linux 两个文件合并
可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以 ...
- HBase 实战(2)--时间序列检索和面检索的应用场景实战
前言: 作为Hadoop生态系统中重要的一员, HBase作为分布式列式存储, 在线实时处理的特性, 备受瞩目, 将来能在很多应用场景, 取代传统关系型数据库的江湖地位. 本篇主要讲述面向时间序列/面 ...
- freeCAD预选项编辑器
freeCAD的预选项系统在 Edit 目录 -> Preferences. freecad的功能分成不同的模块,每一模块负责一个特定的工作台工作.freecad还使用了一个概念叫晚加载,这意味 ...
- 【zz】matlab 腐蚀膨胀算法
1.图像膨胀的Matlab实现: 可以使用imdilate函数进行图像膨胀,imdilate函数需要两个基本输入参数,即待处理的输入图像和结构元素对象.结构元素对象可以是strel函数返回的对象,也可 ...
- php正则替换:
1.要求: 对于: $str = '<p></p><p style="text-indent:241px"><strong>< ...
- sqlserverdriver配置方法 jdbc连接sqlserver
一.下载驱动程序. 下载地址:http://download.microsoft.com/download/8/B/D/8BDABAE2-B6EA-41D4-B903-7916EF3690EF/sql ...
- # mysql -u root -p -bash: mysql: command not found
[root@jboss ~]# mysql -u root -p-bash: mysql: command not found 需要安装mysql # yum install mysql之后就行 了
- NSOperationQueue的其他方法
1.设置最大并发数 什么是并发数 同时执行的任务数 比如,同时开3个线程执行3个任务,并发数就是3 最大并发数的相关方法 - (NSInteger)maxConcurrentOperationCo ...