Java服务器和C#客户端(可以';t交换数据)
我最近开始学习java。我在写一个android应用程序,带有“聊天”功能。我想要一个java聊天服务器,客户端代码将来自C。这是Java服务器代码Java服务器和C#客户端(可以';t交换数据),java,c#,Java,C#,我最近开始学习java。我在写一个android应用程序,带有“聊天”功能。我想要一个java聊天服务器,客户端代码将来自C。这是Java服务器代码 import java.net.*; import java.io.*; public class server { private Socket socket = null; private ServerSocket server = null; private DataInputStream streamI
import java.net.*;
import java.io.*;
public class server
{
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream streamIn = null;
private DataOutputStream streamOut = null;
public server(int port)
{
try
{
System.out.println("Binding to port " + port + ", please wait ...");
server = new ServerSocket(port);
System.out.println("Server started: " + server);
System.out.println("Waiting for a client ...");
socket = server.accept();
System.out.println("Client accepted: " + socket);
open(); // Custom method
boolean done = false;
while(!done)
{
try
{
String line = streamIn.readUTF();
System.out.println(line);
done = line.equals(".bye");
}
catch(IOException ioe)
{
done = true;
}
}
close();
}
catch(IOException ioe)
{
System.out.println(ioe);
}
}
private void close() throws IOException
{
if (socket != null) socket.close();
if(streamIn != null) streamIn.close();
}
public void open() throws IOException
{
streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
//streamOut = new DataOutputStream(socket.getOutputStream());
//streamOut.writeUTF("Hello");
//streamOut.flush();
//System.out.println("Message sent");
}
public static void main(String args[])
{
server ss = null;
if(args.length != 1)
{
System.out.println("Usage: java ChatServer port");
}
else
{
ss = new server(Integer.parseInt(args[0]));
}
}
}
上面的代码是使用eclipse运行的,我在C#客户端应用程序中使用了networkstream和StreamReader,但我可以使用TCPClient连接到服务器,但StreamReader或networkstream无法工作
C#代码
私有静态TcpClient客户端;
私有静态二进制编写器;
private const int MAX_BUFFER_SIZE=1024;
私有静态void Main(字符串[]args)
{
尝试
{
Console.WriteLine(“连接到服务器”);
client=新的TcpClient();
client.Connect(“127.0.0.1”,8888);
writer=newbinarywriter(client.GetStream());
Console.WriteLine(“连接到服务器”);
Console.WriteLine(“发送hello world”);
WriteString(作家,“你好,世界!”);
}
捕获(例外情况除外)
{
控制台写入线(例如消息);
}
Console.Read();
}
公共静态void WriteString(BinaryWriter os,字符串值)
{
if(值!=null)
{
byte[]数组=System.Text.Encoding.Unicode.GetBytes(值);
WriteBuffer(操作系统、阵列);
}
其他的
{
写入(os,0);
}
}
公共静态void WriteBuffer(二进制编写器操作系统,字节[]数组)
{
如果((array!=null)&&&(array.Length>0)&(array.Length
以上代码来自
我也在堆栈中找到了一些使用networkstream的代码,但我没有找到运气。我已经使用StreamWriter/reader编写了一个C#聊天应用程序。谢谢你的帮助。服务器可以正常工作,java客户端可以很好地使用它。(我对C#有点经验,但对Java没有经验)
谢谢
编辑:-我发现这与类使用的编码不同有关。
我让它工作了。我在java codeHi@Aimkiller中使用了StreamReader和Writer,并使用了BufferedReader/Writer,我正在尝试使用Android Studio和C#中的客户端创建一个java服务器,我希望它们都能发送和接收数据,但我没有使我的工作正常,我在从客户端到服务器读取数据时遇到了问题。我想知道你是否有一个完整的服务器和客户端的样本,以便我可以使我的工作。谢谢。@bernzkie抱歉耽搁了。不幸的是,我不记得我最后做了什么。我试图在android应用程序中实现java代码,以便通过它接收一些信息。我离开了学校,因为我必须为考试而学习。获取我的代码并查看我在堆栈中找到的链接。这样会更好。@bernzkie dude请确保使用相同的编码。我使用UTF-8编码,它工作得很好,我让它工作了。我在java codeHi@Aimkiller中使用了StreamReader和Writer,并使用了BufferedReader/Writer,我正在尝试使用Android Studio和C#中的客户端创建一个java服务器,我希望它们都能发送和接收数据,但我没有使我的工作正常,我在从客户端到服务器读取数据时遇到了问题。我想知道你是否有一个完整的服务器和客户端的样本,以便我可以使我的工作。谢谢。@bernzkie抱歉耽搁了。不幸的是,我不记得我最后做了什么。我试图在android应用程序中实现java代码,以便通过它接收一些信息。我离开了学校,因为我必须为考试而学习。获取我的代码并查看我在堆栈中找到的链接。这样会更好。@bernzkie dude请确保使用相同的编码。我使用UTF-8编码,效果很好
private static TcpClient client;
private static BinaryWriter writer;
private const int MAX_BUFFER_SIZE = 1024;
private static void Main(string[] args)
{
try
{
Console.WriteLine("Connecting to the server");
client = new TcpClient();
client.Connect("127.0.0.1", 8888);
writer = new BinaryWriter(client.GetStream());
Console.WriteLine("Connected to the server");
Console.WriteLine("Sending hello world");
WriteString(writer, "Hello World!");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
}
public static void WriteString(BinaryWriter os, string value)
{
if (value != null)
{
byte[] array = System.Text.Encoding.Unicode.GetBytes(value);
WriteBuffer(os, array);
}
else
{
WriteInt(os, 0);
}
}
public static void WriteBuffer(BinaryWriter os, byte[] array)
{
if ((array != null) && (array.Length > 0) && (array.Length < MAX_BUFFER_SIZE))
{
WriteInt(os, array.Length);
os.Write(array);
}
else
{
WriteInt(os, 0);
}
}
public static void WriteInt(BinaryWriter outStream, int value)
{
byte[] buffer = BitConverter.GetBytes(value);
outStream.Write(buffer);
}