Java Server,C#Client。发送数据 [英] Java Server, C# Client. Sending Data

查看:69
本文介绍了Java Server,C#Client。发送数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我在将数据从C#客户端发送到Java Server时遇到问题。连接正在进行,但是我想在某个地方弄乱了。

So, I'm having a problem with sending data from a C# client to a Java Server. The connection is going through, however I'm messing something up somewhere I guess.

这是服务器代码

package com.chris.net;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;


public class Server implements Runnable
{
    private String serverName;
    private boolean isRunning;

private ServerSocket serverSocket;
private Socket clientSocket;

public Server(String name, int port)
{
    try 
    {
        this.serverName = name;
        this.serverSocket = new ServerSocket(port);
        this.isRunning = true;
        new Thread(this).start();
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
}

private BufferedReader recv;

public void run()
{
    while(isRunning)
    {
        try 
        {
            clientSocket = serverSocket.accept();
            System.out.println("Client Connected from " + clientSocket.getInetAddress().getHostAddress() + ":" + clientSocket.getPort());

            recv = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            System.out.println("Data Recieved: " + recv.readLine());

            clientSocket.close();
        }
        catch (IOException e) 
        {
            e.printStackTrace();
        }
    }
}
}

这里是客户端代码

lass TCPClient
{
    private TcpClient Client;
    private NetworkStream Stream;

    private Byte[] Data;

    public TCPClient(string address, int port)
    {
        Client = new TcpClient();
        Client.Connect(address, port);

        Stream = Client.GetStream();

        SendData("Test Data");

        while (Client.Connected)
        {

        }
    }

    public void SendData(string message)
    {
        Data = System.Text.Encoding.ASCII.GetBytes(message);
        Stream.Write(Data, 0, Data.Length);

        Console.WriteLine("Sent: {0}", message);
    }
}

服务器注册连接,客户端似乎认为它已经发送了数据,但我不知道客户端是不是发送了数据,还是服务器没有收到数据。考虑到Console.Writeline只是打印出转换成字节的消息,我无法分辨。

The server registers the connection, and the client seems to think that it has sent the data, however I can't tell if it's the Client not sending the Data or if it's the Server not receiving it. Considering the Console.Writeline is just printing out the message that was converted into bytes, I can't tell.

推荐答案

如果您想使用JSON,请参阅这篇关于让Java发送消息将你的java类型序列化为JSON并接收C#以实现Deserealize的优秀文章一个C#类型。

If you want to work with JSON, refer to this excellent article on getting Java to send message serializing your java type to JSON and on receiving C# to Deserealize to a C# type.

Java中的摘录:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import com.google.gson.Gson;

public class GuyServer {
 public static void main(String[] args)
 throws IOException {
      Gson gson = new Gson();
      ServerSocket serverSocket = new ServerSocket(16001);
      System.out.println("Listening on port 16001. " 
              + "Press enter to quit "
              + "after the next connection.");
      while (System.in.available() == 0) {
           Socket socket = serverSocket.accept();
           System.out.println("A client has connected." 
               + " Sending a new Guy down the pipe.");
           PrintWriter out =
               new PrintWriter(socket.getOutputStream(),
                   true);
           Guy guy = Guy.getRandomGuy();
           String json = gson.toJson(guy);
           out.print(json);
           out.close();
           socket.close();
       }
      System.out.println("Quitting...");
      serverSocket.close();
  }
}

C#结束:

using System;
using System.IO;
using System.Net.Sockets;
using System.Web.Script.Serialization;

class GuyClient
{
     static void Main(string[] args)
     {
          String input;

          using (TcpClient tcpClient = 
                  new TcpClient("localhost", 16001))
          using (NetworkStream networkStream = 
                  tcpClient.GetStream())
          using (StreamReader streamReader = 
                  new StreamReader(networkStream))
          {
               input = streamReader.ReadToEnd();
           }

          Console.WriteLine("Received data: " + input + "\n");

          JavaScriptSerializer javaScriptSerializer = 
                  new JavaScriptSerializer();
          Guy bob = javaScriptSerializer
                  .Deserialize<Guy>(input) as Guy;
          Console.WriteLine(bob.ToString());
      }
}

Java Class

Java Class

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Guy {
     private String name;
     public String getName() {
          return name;
      }     
 }

}

C#Serlizable class

C# Serlizable class

using System;
using System.Collections.Generic;

[Serializable]
class Guy
{
     public string Name { get; set; }    
}

我清理了一下以便更容易理解。它不会编译,但你明白了。

I cleaned this up a bit to make it easier to understand. It won't compile but you get the idea.

这篇关于Java Server,C#Client。发送数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆