码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-31 16:11:09      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

首先说一下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);
        }
        
    }
    
}
View Code

回顾一下流程

(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

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

标签:

原文地址:http://www.cnblogs.com/csdev/p/4692387.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!