【发布时间】:2012-01-26 07:17:35
【问题描述】:
我正在尝试在 Java 服务器和 C++ 客户端之间建立连接。但是当我在客户端读取数据时,我总是有相同的奇怪字符(¬í)。我试图改变双方的编码,但没有任何效果。
这是我的 Java 代码:
public class Serveur
{
public static void main(String[] args) throws Exception
{
final int PORT = 13370;
try
{
ServerSocket service= new ServerSocket(PORT);
Socket connection = service.accept();
PrintWriter pw = new PrintWriter(connection.getOutputStream());
String s = Integer.toString(5);
while(true)
{
pw.print(s.getBytes("UTF-8"));
pw.flush();
pw.close();
}
connection.close();
}
}
我还尝试使用 OutputStream、DataOutputStream 和 BufferedOutputStream。
这里是 C++ 代码:
int main(int argc, char* argv[])
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
SOCKET sock;
SOCKADDR_IN sin;
char buffer[512];
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(13370);
sock = socket(AF_INET,SOCK_STREAM,0);
if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR)
{
cout<<"connection"<<endl;
if(recv(sock, buffer, sizeof(buffer), 0) != SOCKET_ERROR)
{
string s = buffer;
wchar_t *pwchello = L"Hi";
wchar_t *pwc = (wchar_t *)malloc( sizeof( wchar_t ));
char *pmbhello = buffer;
int i = mbstowcs(pwc,pmbhello, MB_CUR_MAX);
cout << i << endl;
cout<<"cout : "<<pwc<<endl;
cout <<buffer<<endl;
printf("printf : %s\n", buffer);
cout << "wsagetlasterror() : "<<WSAGetLastError();
closesocket(sock);
WSACleanup();
free(m_pBuffer);
}
return 0;
}
如您所见,我尝试了不同的解决方案但没有成功。
提前谢谢,对不起,我的英语可能不太好
【问题讨论】:
-
这是 C 还是 C++?从外观上看,它是 C,(即:您使用的是
malloc)。 -
这是winapi吗?也许你想这样标记它?在任何情况下,了解如何使用诸如wireshark 之类的工具是很有用的,这样您就可以看到线路上的实际内容,以确定首先查看哪些程序。
-
可能是因为 UTF-8,我会尝试 ASCII
-
@netcoder 除了如果它是 C 就不会编译。面对现实,所有那些你嘲笑为“丑陋”的东西都是你选择的语言的一部分。 :-) 现在“惯用”或具有适当的 C++ 风格是另一个问题...
-
@asveikau:实际上,它也不会在 C++ 中编译。缺少
}。
标签: java c++ sockets networking