问题:手机某项功能服务需要采用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. package.json bin

    [package.json bin] 1.bin field in your package.json which is a map of command name to local file nam ...

  2. 基于oslo_messaging的RPC通信

    oslo_messaging源于Openstack的一个经典的模块,用以实现服务间的RPC通信.Client端将数据放入rabbitmq中,server端从消息队列中获取传送数据. oslo.mess ...

  3. 创建java项目思路

    一.搭建 1.创建搭建项目 2.创建分层 二.理解项目(理清总体思路) 1.是否有共同部分(过滤或者拦截) 常用量 (static) 2.搭建单表基本增(是否需要返回值)   删(条件)    查(条 ...

  4. asp.net之发送邮件2

    public void SendMail(string from, string to, List<string> cc, string subject, string body) { M ...

  5. H5前端框架推荐合集 (转)

    Ionic ionic 吧开发流程都帮你做好了,已经不再是单纯的UI框架,而是开发框架了,非常适合快速开发.基于angular2,丰富的UI组件,大大改进的编程模型, Semantic UI 中文官网 ...

  6. springboot jpa 审计

    @SpringBootApplication @EnableJpaAuditing public class Application {...} @Component public class Aud ...

  7. java面试题:网络通信

    网络分层 Q:OSI网络七层模型. Http Q:http协议的状态码有哪些?含义是什么? 200,服务器已成功处理了请求. 302,重定向. 400,错误请求. 401,未授权,请求要求身份验证. ...

  8. 恶性肿瘤预测Python程序(逻辑回归)

    from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge,LogisticRegression from sklearn ...

  9. Android使用VideoView播放本地视频及网络视频Demo

    1.xm文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...

  10. white-space和word-wrap和word-break所表示的换行和不换行的区别

    一.前言 使得文本换行有很多方式, <br/>标签元素,能够强制使得所在位置文本换行 <p>元素,<div>设定宽度,都可以对文本内容实现自适应换行 对于长单词或者 ...