问题:手机某项功能服务需要采用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. Loading Assets from AssetBundles

    [Loading Assets from AssetBundles] 1.LoadAsset GameObject gameObject = loadedAssetBundle.LoadAsset&l ...

  2. 解题6(OutputNMin)

    题目描述 输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int * pInputArray, unsign ...

  3. centos 7 下 TFTP服务器安装

    一.介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议)),是一个基于UDP 协议 69端口 实现的用于在客户机和服务器之间进行简单文件传输的协议提供不复杂 ...

  4. HDU 4940 Destroy Transportation system(无源汇上下界网络流)

    Problem Description Tom is a commander, his task is destroying his enemy’s transportation system. Le ...

  5. 【校招面试 之 网络】第2题 TCP的可靠传输、流量控制、滑动窗口

    1.可靠传输 (1)三次握手 TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接: (1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_S ...

  6. C#的格式化(进制转换|位运算)

    1.首先做一下知识的普及C或c Currency 货币格式D或d Decimal 十进制格式E或e Exponent 指数格式F或f Fixed point (float)固定精度格式G或g Gene ...

  7. rsync同步工具的配置与使用

    一.什么是rsync?rsync是一款开源的,快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具. rsync官网 http://rsync.samba.org/ 二.rsync的工 ...

  8. Oracle 表空间和数据文件之间的关系

    首先,你需要明白的一点是:数据库的物理结构是由数据库的操作系统文件所决定,每一个Oracle数据库是由三种类型的文件组成:数据文件.日志文件和控制文件.数据库的文件为数据库信息提供真正的物理存储. 每 ...

  9. ABP框架使用Swagger

    参考文档:https://www.cnblogs.com/xcsn/p/7910890.html 步骤1:Nuget安装Swashbuckle到*.WebApi项目 步骤2:在*.WebApi> ...

  10. netcore sqlserver linq contains生成的sql语句不是使用like而是charIndex

    在ef中使用linq调用了contains,结果怎么都查不到值,打开sqlserver profiler 发现生成的sql语句不是使用like...而是CharIndex 参考文档:https://s ...