[英]C# Server and Java Client
I'm trying to write a small client server program. 我正在尝试编写一个小型客户端服务器程序。 The Server is in C#, and the client is in Java. 服务器位于C#中,客户端使用Java。 Here are the codes: 以下是代码:
Server: 服务器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace Server
{
class Program
{
private TcpListener tcpListener;
public static void Main(string[] args)
{
Program program = new Program();
program.StartServer();
while (true) ;
}
private bool StartServer()
{
IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
try
{
tcpListener = new TcpListener(ipAddress, 5678);
tcpListener.Start();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(this.ProcessEvents), tcpListener);
Console.WriteLine("Listing at Port {0}.", 5678);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
return false;
}
return true;
}
private void ProcessEvents(IAsyncResult asyn)
{
try
{
TcpListener processListen = (TcpListener)asyn.AsyncState;
TcpClient tcpClient = processListen.EndAcceptTcpClient(asyn);
NetworkStream myStream = tcpClient.GetStream();
if (myStream.CanRead)
{
StreamReader readerStream = new StreamReader(myStream);
string myMessage = readerStream.ReadToEnd();
readerStream.Close();
}
myStream.Close();
tcpClient.Close();
tcpListener.BeginAcceptTcpClient(new AsyncCallback(this.ProcessEvents), tcpListener);
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}
}
}
Client: 客户:
import java.io.PrintWriter;
import java.net.Socket;
public class Program {
public static void main(String[] args) {
Socket socket;
try {
socket = new Socket( "127.0.0.1", 5678);
PrintWriter writer = new PrintWriter(socket.getOutputStream());
writer.print("Hello world");
writer.flush();
writer.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
But when I try to create a Socket in client, I get this exception: 但是当我尝试在客户端创建一个Socket时,我得到了这个异常:
java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at Program.main(Program.java:10)
Can anyone tell me what I'm doing wrong here? 谁能告诉我这里我做错了什么?
updated: I'm running x64 Windows 7 Ultimate, I don't see anything firewall message pop up (I did saw it for server once, which I allowed and set to always allow). 更新:我正在运行x64 Windows 7旗舰版,我没有看到任何防火墙消息弹出(我确实看到它为服务器一次,我允许并设置为始终允许)。 I can connect using telenet, no problem with that. 我可以使用telenet连接,没问题。 Any other suggestion please. 请其他任何建议。
I have finally figured out the problem myself. 我终于找到了自己的问题。
The .Net server was by default using ipv6 address, and Java client was using the ipv4 address. .Net服务器默认使用ipv6地址,Java客户端使用ipv4地址。 To create a ipv4 address use: 要创建ipv4地址,请使用:
TcpListener tcpListener = new TcpListener(IPAddress.Any, 5678);
instead of: 代替:
IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
TcpListener tcpListener = new TcpListener(ipAddress, 5678);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.