您好,登錄后才能下訂單哦!
Java socket通信與C++之間的關系是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
c++builer與Java socket通信是我們在編程中經常用到的,有不少的人還有很多問題需要解決。下面我們就來看看如何解決有關于Java socket通信與C++之間的相關問題。希望大家有所了解。
C++builer與Java都提供了功能豐富的socket控件/類。這里將實現c++builer與Java之間的socket通信,能夠使雙方互相發送信息。在C++builer里,我們采用 ServerSocket控件做為服務器端,Java socket通信里采用Socket類做為客戶端。本示例中互相發送的都為結構體,在C++builer里定義為:
typedef struct { int int1; float f; char ch[20]; double d; } TMyMsg;
Java里發送部分是直接用的DataOutputStream 的writeXXX方法,當然也可以用內部類轉換成byte[]進行發送。
源代碼如下:
C++builer服務器端Unit1.cpp
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <winsock.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ServerSocket1->Active = true;
}
void __fastcall TForm1::BtnSendClick(TObject *Sender)
{
//發送的數據要進行字節序轉換.
TMyMsg sendmsg;
sendmsg.int1 = htonl(30);
sendmsg.f = ntohf(12.345);
strcpy(sendmsg.ch,"測試數據!");
sendmsg.d = ntohd(67.890);
ServerSocket1->Socket->Connections[0]->SendBuf(&sendmsg,
sizeof(TMyMsg));}
void __fastcall TForm1::FormShow(TObject *Sender)
{
MemoSend->Lines->Add("int : 30");
MemoSend->Lines->Add("float : 12.345");
MemoSend->Lines->Add("char [20] : 測試數據!");
MemoSend->Lines->Add("double : 67.890");
}
void __fastcall TForm1::ServerSocket1ClientRead(TObject
*Sender,TCustomWinSocket *Socket)
{
//接收的數據字節序轉換
TMyMsg remsg;
Socket->ReceiveBuf(&remsg,sizeof(TMyMsg));
int int1 = ntohl(remsg.int1);
float f = ntohf(remsg.f);
char *ch = new char[20];
strcpy(ch,remsg.ch);
AnsiString sch = StrPas(ch);
double d = ntohd(remsg.d);
delete [] ch;
MemoRec->Lines->Add(int1);
MemoRec->Lines->Add(f);
MemoRec->Lines->Add(sch.Trim());
MemoRec->Lines->Add(d);
}
看完上述內容,你們掌握Java socket通信與C++之間的關系是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。