问题:手机某项功能服务需要采用TCP协议与第三方交互通信。需先在公司内部测试此功能。

原因:第三方没有任何消息返回,也没有客服提供服务。

解决方法:公司内部做一个TCP协议服务器端,根据外网ip+端口提供服务。只要有握手请求,就有返回。

方案:建立服务器端提供服务,客户端测试服务。

一、服务器端代码:

using System.Net.Sockets;
using Server.Library;
namespace Server
{
class ServerTcpTime
{
private const int portNum = 100;

[STAThread]
static void Main(string[] args)
{
string receiveMessage = string.Empty;
string sendMessage = string.Empty;

bool done = false;
TcpListener listener = new TcpListener(portNum);
listener.Start();
while (!done)
{
try
{
Console.WriteLine("Waiting for connection...");
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Connection accepted.");
NetworkStream ns = client.GetStream();

//接收信息
#region
byte[] receiveBuffer = new byte[client.ReceiveBufferSize];
ns.Read(receiveBuffer, 0, receiveBuffer.Length);//读取网络流中的数据
receiveMessage = Encoding.Default.GetString(receiveBuffer).Trim('\0');//转换成字符串
Console.WriteLine(string.Format("{1} 接收到客户端发来的信息:{0}", receiveMessage, DateTime.Now.ToString()));
LogHelper.WirteMsg2LogFile(string.Format("接收到客户端发来的信息:{0}", receiveMessage), "TcpServer");
#endregion

//回复信息
#region
sendMessage = "在" + DateTime.Now.ToString() + "收到信息。";
byte[] sendBuffer = Encoding.Default.GetBytes(sendMessage);
ns.Write(sendBuffer, 0, sendBuffer.Length);
ns.Flush();
LogHelper.WirteMsg2LogFile(string.Format("返回给客户端的信息:{0}", sendMessage), "TcpServer");
#endregion

ns.Close();
client.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}

listener.Stop();
}

}
}

二、客户端代码:

using System.Net.Sockets;
namespace Client
{
public class ClientTcpTime
{
private const int portNum = 100;//服务器端口,可以随意修改
private const string hostName = "127.0.0.1";//服务器地址,127.0.0.1指本机

[STAThread]
static void Main(string[] args)
{
string receiveMessage = string.Empty;
string sendMessage = string.Empty;
try
{
Console.Write("Try to connect to " + hostName + ":" + portNum.ToString() + "\r\n");
TcpClient client = new TcpClient(hostName, portNum);
NetworkStream ns = client.GetStream();

//发送消息
sendMessage = "客户端发送的消息";
byte[] sendBuffer = Encoding.Default.GetBytes(sendMessage);
ns.Write(sendBuffer, 0, sendBuffer.Length);
ns.Flush();

//接收回复
receiveMessage = string.Empty;
byte[] receiveBuffer = new byte[10240];
int receiveBufferLength = ns.Read(receiveBuffer, 0, receiveBuffer.Length);
receiveMessage = Encoding.Default.GetString(receiveBuffer).Trim('\0');//转换成字符串
Console.WriteLine(string.Format("{1} 接收到服务器的返回信息:{0}", receiveMessage, DateTime.Now.ToString()));

ns.Close();
client.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}

Console.ReadLine();//由于是控制台程序,故为了清楚的看到结果,可以加上这句
}

}
}

.NET TCP协议之TcpClient与TcpListener交互的更多相关文章

  1. Java网络编程(TCP协议-服务端和客户端交互)

    客户端: package WebProgramingDemo; import java.io.IOException; import java.io.InputStream; import java. ...

  2. 浅析C#基于TCP协议的SCOKET通信

    TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程.然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实 ...

  3. 闲来无事,写个基于TCP协议的Socket通讯Demo

    .Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...

  4. C#网络编程之---TCP协议的同步通信(二)

    上一篇学习日记C#网络编程之--TCP协议(一)中以服务端接受客户端的请求连接结尾既然服务端已经与客户端建立了连接,那么沟通通道已经打通,载满数据的小火车就可以彼此传送和接收了.现在让我们来看看数据的 ...

  5. 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

    Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...

  6. C#网络编程之--TCP协议(一)

    TCP 是面向连接的传输协议 面向连接,其实就好比,A打电话给B,如果B接听了,那么A和B之间就的通话,就是面向连接的 TCP 是全双工的传输协议 全双工,这个理解起来也很简单,A打电话给B,B接听电 ...

  7. Socket的三个功能类TCPClient、TCPListener 和 UDPClient (转)

    应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制协议 (TCP) 和用户数据文报协议 (UDP) 服务.这些协议类建立在 System.Net.So ...

  8. TCP移动端跟服务器数据交互

    同一台笔记本下的客户端和服务端 TCPClient 客户端: //  RootViewController.h#import <UIKit/UIKit.h>#import "As ...

  9. 【socket】Socket的三个功能类TCPClient、TCPListener 和 UDPClient

    Socket的三个功能类TCPClient.TCPListener 和 UDPClient (转) 应用程序可以通过 TCPClient.TCPListener 和 UDPClient 类使用传输控制 ...

随机推荐

  1. JS导出网页数据到EXCEL

    想得到的效果是,在网页上点击导出按钮,弹出文件保存框,输入文件名并选择路径后保存.可能是由于浏览器的安全机制,一直没能找到合适的解决方案,就采用了其它的一些替代方案. 思路是:后台一般处理程序查询数据 ...

  2. .Net下几种ORM框架的对比

    1.Entity Framework(重量级)2.NHibernate(重量级)3.Dapper(轻量级)4.PetaPoco(轻量级)5.MyBatis.Net (介于EF和Dapper之间) 对比 ...

  3. JMeter学习(十三)目录介绍(转载)

    转载自 http://www.cnblogs.com/yangxia-test JMeter也学了一阵子了,对于基本的操作已了解,再回过头来看看Jmeter的目录,本篇是对于它的目录进行一些简单的介绍 ...

  4. 七、Builder 建造器模式

    需求:需要组装复杂结构的实例 代码清单: Builder 接口: public abstract class Builder { public abstract void makeTitle(Stri ...

  5. eclipse环境的搭建(转载)

    原文地址:http://hanqunfeng.iteye.com/blog/982182 此文章发表于2011年到2012年 使用eclipse真的有年头了,相信java程序员没有不知道它的,最近在给 ...

  6. hbase备份数据与异地新建

    hbase org.apache.hadoop.hbase.mapreduce.Driver export news /tmp/news1 备份news表至hdfs的/tmp目录下面. hadoop ...

  7. Asp.net中GridView使用详解(很全,很经典 转来的)

    Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l         ...

  8. Stealth潜行风格游戏源码(Unity5x)

    官方的Stealth画质看起来不错.Unity 官方说Stealth样例属于中等难度,通过学习Stealth,可以获得:   Create a fully functioning level of a ...

  9. Visual C++ 6.0 创建C语言程序

    1 文件-->新建-->”文件“选项卡-->C++ Source File. 2 输入文件名.选择文件位置,点击确定,弹出编辑器窗口. 3 在编辑器窗口中,输入C程序代码,然后保存. ...

  10. Js或 Activex 控件调用打印预览等操作

    <input value="打印" type="button" onclick="javascript:window.print()" ...