JavaサーバーとC++クライアントの間の接続を試みています。しかし、クライアントのデータを読むと、私はいつも同じ奇妙なキャラクター(¬)を持っています。私は両方の側でエンコーディングを変更しようとしましたが、何も動作しません。ここで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'を使用しています)。 – netcoder
これはwinapiですか?おそらくあなたはそのようなタグを付けたいでしょうか?どのような場合でも、wiresharkのようなツールを使用して実際にワイヤに何が見えるのかを知り、どのプログラムを最初に見るかを知ることは有益です。 – PlasmaHH
それはUTF-8のためかもしれないが、私はASCIIを試してみるだろう –