gpt4 book ai didi

C# 服务器和 Java 客户端

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:24 24 4
gpt4 key购买 nike

我正在尝试编写一个小型客户端服务器程序。服务器使用 C#,客户端使用 Java。以下是代码:

服务器:

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());
}
}
}
}

客户:

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();
}

}

}

但是当我尝试在客户端中创建一个 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)

谁能告诉我我做错了什么?

更新:我正在运行 x64 Windows 7 Ultimate,我没有看到任何防火墙消息弹出(我确实在服务器上看到过一次,我允许并设置为始终允许)。我可以使用 telenet 连接,没问题。请提出任何其他建议。

最佳答案

我终于自己解决了这个问题。

.Net 服务器默认使用 ipv6 地址,而 Java 客户端使用 ipv4 地址。要创建 ipv4 地址,请使用:

TcpListener tcpListener = new TcpListener(IPAddress.Any, 5678);

代替:

IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[0];
TcpListener tcpListener = new TcpListener(ipAddress, 5678);

关于C# 服务器和 Java 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com