gpt4 book ai didi

java - Java和C++之间的套接字通信

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:26 24 4
gpt4 key购买 nike

我正在尝试在 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;
}

如您所见,我尝试了不同的解决方案但没有成功。

提前致谢,抱歉我的英语可能不是很好

最佳答案

您混淆了许多不同的编码转换和 I/O 策略。您应该尝试以下简化版本:

if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR)
{
cout << "connection" << endl;

// the result of 'recv()' is either SOCKET_ERROR or
// the number of bytes received. don't though away
// the return value.
const int result = recv(sock, buffer, sizeof(buffer), 0);
if(result != SOCKET_ERROR)
{
// use length (in bytes) returned by 'recv()'
// since buffer is not null terminated.
string s(buffer,result);

// 's' is in UTF-8 no converstion to wide strings
// should be necessary.
cout << "message: '" << s << "'." << endl;
}

closesocket(sock);
}
WSACleanup();

但是请注意,标准输出在当前代码页中,通常 UTF-8 不是默认代码页。将 Unicode 数据输出到 Windows 中的控制台需要一些其他库调用来配置。

关于java - Java和C++之间的套接字通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8607421/

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