问题:手机某项功能服务需要采用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. 检查WMI协议是否通的

    在APM上的运行执行“wbemtest”,然后在上面的root\sivm前面加RPC不通的机器,先查WMI协议是否是通的

  2. asp.net导出excle

    思路:实际上是读取页面上某个控件下的内容再导出 protected void btnExcel_Click(object sender, EventArgs e) { string bgType = ...

  3. python 函数的定义及传参

    函数是一个通用的程序结构部件,是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 定义一个简单的函数: >>> def test(a): #创建一个函数,函数名是test ...

  4. SpringMVC包括哪些组件

      1 映射器 1.1作用:Handlermapping根据url查找Handler   2 适配器 2.1作用:HandlerAdapter执行Handler   3 解析器 3.1作用:View ...

  5. 在window下搭建Vue.Js开发环境(转)

    nodejs官网http://nodejs.cn/下载安装包,无特殊要求可本地傻瓜式安装,这里选择2017-5-2发布的 v6.10.3 cmd命令行: node -v //显示node版本 v6.1 ...

  6. opsmanage 自动化运维管理平台

    关闭防火墙.selinux 更换阿里云 yum源 依赖环境 yum install -y epel-releaseyum install vim net-tools nmon htop rsync t ...

  7. Shc 应用

    1.说明 shc是一个加密shell脚本的工具, 它的作用是把shell脚本转换为一个可执行的二进制文件 2.安装 下载 # mget  http://www.datsi.fi.upm.es/~fro ...

  8. CentOS 几种重启方式的区别

    Linux centos重启命令: 1.reboot   普通重启 2.shutdown -r now 立刻重启(root用户使用) 3.shutdown -r 10 过10分钟自动重启(root用户 ...

  9. JS中取得<asp:TextBox中的值

    var s = document.getElementById("<%=txt_DaShen.ClientID %>").value; 注:txt_DaShen 为as ...

  10. Ionic后退刷新

    版本:Angular 1.5.3.Ionic1.3.2 一 禁用缓存,全页面刷新. 每次前进/ 后退时,控制器都会执行. 1 AngularJS ui-router路由禁用缓存 var app = a ...