基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨

首先说一下networkcomms 通信框架是商业版的,本文也并不提供。

对java不太熟悉,刚刚安装了eclipse,通信只实现了把字符从java客户端传到c#服务器,服务器收到消息后,返回一个字符消息给java客户端,java客户端显示收到的消息。

服务器端基于networkcomms V3 C#通信框架.

服务器端代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NetworkCommsDotNet;
using NetworkCommsDotNet.DPSBase;
using NetworkCommsDotNet.Tools;

using NetworkCommsDotNet.Connections;
using NetworkCommsDotNet.Connections.TCP;
using System.Net;
using MessageContract;

namespace Server
{
    public partial class Form1 : Form
    {
        SendReceiveOptions sro = new SendReceiveOptions(DPSManager.GetDataSerializer<NullSerializer>(), null, null);

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //服务器开始监听客户端的请求
            //开始监听某端口

           //与其他语言通信   禁用ApplicationLayerProtocolStatus
            TCPConnectionListener  listener=new TCPConnectionListener (sro,ApplicationLayerProtocolStatus.Disabled);

            Connection.StartListening(listener, new IPEndPoint(IPAddress.Parse(txtIP.Text), int.Parse(txtPort.Text)));

            button1.Text = "监听中";
            button1.Enabled = false;

            //此方法中包含服务器具体的处理方法。
            StartListening();
        }

        private void StartListening()
        {
            NetworkComms.DisableLogging();

            //array  收到字节
            NetworkComms.AppendGlobalIncomingUnmanagedPacketHandler((header, connection, array) =>
            {
                //  C#语言UTF-8字节数组转换成字符串
                string recvStr = Encoding.UTF8.GetString(array, 0, array.Length);

                //记录一下 证明消息已经收到
                string newStr = "收到的字符串是" + recvStr;

                LogInfo.LogMessage(newStr, "日志.txt");

                //返回消息给java客户端
                string serverStr = "服务器发出的消息123";

                byte[] newByte = Encoding.UTF8.GetBytes(serverStr);
                //发送字节数据
                connection.SendUnmanagedBytes(newByte);
            });

        }

        private void Form1_FormClosing_1(object sender, FormClosingEventArgs e)
        {
            NetworkComms.Shutdown();
            Environment.Exit(Environment.ExitCode);
        }
    }
}

客户端界面:

客户端java代码(对java不是很熟悉,代码可能有不妥之处):

package com.yee4.liu;
import java.io.BufferedReader;  

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;  

public class helloworld extends Thread{

    public static byte[] readStream(InputStream inStream) throws Exception {
        int count = 0;
        while (count == 0) {
            count = inStream.available();
        }
        byte[] b = new byte[count];
        inStream.read(b);
        return b;
    }  

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {
        Socket socket = null;

        int j = 0;
        try {

            socket = new Socket("127.0.0.1", 3000);
            if (socket.isConnected()) {
                System.out.println("已建立连接!---");

                String strContent="java发送的消息";

                byte[] bs = strContent.getBytes("UTF-8");

                //2.得到socket读写流
                OutputStream os=socket.getOutputStream();  

                //3.利用流按照一定的操作,对socket进行读写操作  

                os.write(bs);
                os.flush();

                System.out.println("----------------------------------");  

                InputStream ips = socket.getInputStream();
                byte[] rebyte = readStream(ips);  

                String resultStr = new String(rebyte, 0, rebyte.length, "UTF-8");
                System.out.println("收到主机消息:" + resultStr);  

            }

        }

        catch(Exception s){
            System.out.print(s);
        }

    }

}

回顾一下流程

(1):打开 C#程序,开始监听

(2):运行java客户端,发送一个消息给c#服务器

    String strContent="java发送的消息";

                byte[] bs = strContent.getBytes("UTF-8");

                //2.得到socket读写流
                OutputStream os=socket.getOutputStream();  

                //3.利用流按照一定的操作,对socket进行读写操作  

                os.write(bs);
                os.flush();
               

(3):c#服务器收到消息后,进行解析

<1>:

  //  C#语言UTF-8字节数组转换成字符串
                string recvStr = Encoding.UTF8.GetString(array, 0, array.Length);

                //记录一下 证明消息已经收到
                string newStr = "收到的字符串是" + recvStr;

                LogInfo.LogMessage(newStr, "日志.txt");

<2>返回消息给java客户端:

  //返回消息给java客户端
                string serverStr = "服务器发出的消息123";

                byte[] newByte = Encoding.UTF8.GetBytes(serverStr);
                //发送字节数据
                connection.SendUnmanagedBytes(newByte); 

(4):java客户端接收消息,并显示出来

  InputStream ips = socket.getInputStream();
                byte[] rebyte = readStream(ips);  

                String resultStr = new String(rebyte, 0, rebyte.length, "UTF-8");
                System.out.println("收到主机消息:" + resultStr);  

java程序好像接收完消息后,就退出了,这里不知道怎样处理。

程序只在我的电脑测试成功,win7系统,未在其他系统进行测试。

c#工程文件下载 (不含通信框架)

java文件

参考文章:

http://www.cnblogs.com/iyangyuan/archive/2012/12/23/2829712.html

http://cuisuqiang.iteye.com/blog/1434416

http://blog.csdn.net/mecho/article/details/7342654

http://www.cnblogs.com/iyangyuan/archive/2012/12/23/2829712.html#3140522

http://cuisuqiang.iteye.com/blog/1434416

http://blog.csdn.net/paincupid/article/details/10635323

时间: 2024-10-29 01:15:32

基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨的相关文章

基于networkcomms V3通信框架的c#服务器与java客户端进行通信之Protobuf探讨

在上一篇 基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨  中探讨了在C#端与Java端通信中传递字符,有朋友提到如果传递int类型的整数,会出现编码的问题. 到网上找到了一篇文章< 使用protobuf进行C#与Java通信 >进行学习 ,使用protobuf进行编码,传递数据,好像这样可以避免编码的问题. (虽然编码问题解决了,但是粘包问题并没有解决,有经验的朋友介绍下怎样解决粘包的问题) 服务器端基于networkcomms V3 C#通信框架. ne

基于NetworkComms V3 使用二进制数据通信

如果客户端和服务端都是C#语言,可以使用 NetworkComms V3 框架自带的,包装的protobuf序列化方式,或者BinaryFormater的方式序列化,都很方便. 刚才和朋友探讨基于networkComms V3与其他语言通信,客户端和服务器端之间传递二进制数组. 本例实现了C#客户端与服务器端传递二进制数据,以此模仿与其他语言的通信 服务器端代码: using System; using System.Collections.Generic; using System.Compo

C++服务器与java进行socket通信案例

分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyzhb/article/details/8047619 你可以学习,分享,修改,教学等.但是不得用于商业目的.目前已经发现互联网上大量与本文完全相同的文章,但是却把作者信息删除的干干净净,并且据为己有,打上某培训机构的广告!实属可恶! 最新消息:项目成品连接:http://blog.csdn.net/

NetworkComms c#通信框架与Java的Netty框架通信 解决粘包问题

上次写了一篇文章  基于networkcomms V3通信框架的c#服务器与java客户端进行通信之Protobuf探讨 其中没有解决粘包问题,抛砖引玉,文章得到了失足程序员 老师的点评,并给出了解决方案:[最多评论]java netty socket库和自定义C#socket库利用protobuf进行通信完整实例(10/591) » 于是马上开始学习,并把c#服务器端换成了我比较熟悉的networkcomms v3 c#通信框架(商业版,本文并不提供) ,以方便与已经存在的系统进行整合. 客户

NetworkComms V3 使用Json序列化器进行网络通信

刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/23/2829712.html#3140522 其中提到了 C#与java如通过传递对象通信的问题 摘引如下: 通信关键: C#和java用Socket通信,发送数据和接收数据可以统一采用UTF-8编码,经过测试,使用UTF-8编码可以成功传递对象. 对于Socket技术,发送数据之前,一般将字符串

HP-SOCKET TCP/UDP通信框架库解析

项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功能,供上层应用直接简单使用的接口实现:而对于数据包完整性和协议解析等未处理, 也就意味着需要应用层自己处理一些数据包构造或解析等操作: 事实上目前只能支持windows平台: 1. 对于TCP通信模式下:服务器端和Agent均采用的是异步IO模型中的完成端口模型,客户端采用的是就绪IO通告模型中的W

成熟的C#网络通信框架介绍——ESFramework通信框架

ESFramework通信框架是一套性能卓越.稳定可靠.强大易用的跨平台C#网络通信框架,支持应用服务器集群.其内置了消息的收发与自定义处理(支持同步/异步模型).消息广播.P2P通道.文件传送(支持断点续传).心跳检测.断线重连.登录验证.在线用户管理.好友与群组管理.性能诊断等功能.基于ESFramework通信框架,您可以方便快捷地开发出各种优秀的网络通信应用.此外,我们在长期实践中所积累的丰富经验,更将成为您强大的技术保障,从开发到上线直至后续运维,全程为您保驾护航,让您高枕无忧.具体而

NetworkComms V3 基础知识1

Networkcomms 是一款C# 语言编写的TCP/UDP通信框架  作者是英国人  目前已经开源  开源地址是:https://github.com/MarcFletcher/NetworkComms.Net networkcomms通讯框架使用简单方便,性能稳定. 从github上下载到源码后,需要Visual studio安装nuget 加载相关DLL. networkcomms默认使用protobuf进行数据的序列化. 服务器开始监听: Connection.StartListeni

搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 (1)

搭建QQ聊天通信的程序:(1)基于 networkcomms.net 创建一个WPF聊天客户端服务器应用程序 原文地址(英文):http://www.networkcomms.net/creating-a-wpf-chat-client-server-application/ 注意:本教程是相当广泛的,如果你是在短请也看到我们的东西 开始和 如何在几分钟内创建一个客户端服务器应用程序教程. 注2:本例中包括,明显延长进一步证明功能,在包中包含的示例 包下载. 在我们开始之前确保您已经安装了Vis