如何将vcsocketjava_java与VC通信socket实现学步园功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计694个文字,预计阅读时间需要3分钟。
最近要做的是一个东西,是Android客户端需要与VC编写的服务器端进行数据对接,避免交互麻烦,先从Java尝试吧。
最近要做一個東西是android客戶端要與VC寫的服務器端進行數據連接與交換無奈先從java測試吧a最近要做一個東西是android客戶端要與VC寫的服務器端進行數據連接與交換無奈先從java測試吧android還沒弄其實只要是遵循的同一個協議就可以通信了不管你的客戶端和服務器是什麼
服務器端VC代碼如下
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested MAKEWORD( 1, 1 );
err WSAStartup( wVersionRequested,
if ( err ! 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) ! 1 ||
HIBYTE( wsaData.wVersion ) ! 1 )
{
WSACleanup( );
return;
}
//一下代碼獲得IP和計算機名
char name[255];
char* ip NULL;
PHOSTENT hostInfo;
if (gethostname(name,sizeof(name)) 0)
{
if (hostInfo gethostbyname(name))
{
ip inet_ntoa(*(in_addr*)*(hostInfo->h_addr_list));
}
}
printf("%s--%s\n",ip,name);
//獲取socketServer對象
SOCKET sockSrv socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr htonl(INADDR_ANY); //設置監聽地址
addrSrv.sin_family AF_INET; //監聽類型
addrSrv.sin_port htons(6000); //監聽端口
bind(sockSrv,(SOCKADDR*)
listen(sockSrv,10);
SOCKADDR_IN addrClient;
int lensizeof(SOCKADDR);
while(true)
{
//開始接受數據等待
SOCKET sockConn accept(sockSrv,(SOCKADDR*)
char recvBuf[266] {0};
recv(sockConn,recvBuf,266,0);
std::cout < } //關閉套接字 closesocket(sockSrv); WSACleanup(); } 當然還要加入WS2_32.LIB文件。 客戶端代碼如下 import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; public class ClientSocket extends Socket{ Socket socket; /** * 構造 */ public ClientSocket(String ip , int port){ try { socket new Socket(ip, port); System.out.println("連接建立成功: site:" ip " port:"port); } catch (UnknownHostException e) { System.out.println("失敗"); e.printStackTrace(); } catch (IOException e) { System.out.println("失敗"); e.printStackTrace(); }
}
public String send(String msg)
{
try {
System.out.println("發送的內容" msg);
PrintWriter out new PrintWriter(socket.getOutputStream());
out.print(msg);
out.flush();
return null;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void close()
{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SocketException {
ClientSocket socket new ClientSocket("127.0.0.1", 6000);
socket.send("zhouxuguang");
socket.close();
System.out.println(socket.getReceiveBufferSize());
System.out.println(socket.getSendBufferSize());
}
}
測試結果如下
客戶端
連接建立成功: site:127.0.0.1 port:6000
發送的內容zhouxuguang
8192
8192
服務器端
當然這只是簡單的字符串數據傳輸複雜的消息結構體的傳輸還有待進一步研究。下一步要研究android上怎麼與VC通信。
本文共计694个文字,预计阅读时间需要3分钟。
最近要做的是一个东西,是Android客户端需要与VC编写的服务器端进行数据对接,避免交互麻烦,先从Java尝试吧。
最近要做一個東西是android客戶端要與VC寫的服務器端進行數據連接與交換無奈先從java測試吧a最近要做一個東西是android客戶端要與VC寫的服務器端進行數據連接與交換無奈先從java測試吧android還沒弄其實只要是遵循的同一個協議就可以通信了不管你的客戶端和服務器是什麼
服務器端VC代碼如下
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested MAKEWORD( 1, 1 );
err WSAStartup( wVersionRequested,
if ( err ! 0 )
{
return;
}
if ( LOBYTE( wsaData.wVersion ) ! 1 ||
HIBYTE( wsaData.wVersion ) ! 1 )
{
WSACleanup( );
return;
}
//一下代碼獲得IP和計算機名
char name[255];
char* ip NULL;
PHOSTENT hostInfo;
if (gethostname(name,sizeof(name)) 0)
{
if (hostInfo gethostbyname(name))
{
ip inet_ntoa(*(in_addr*)*(hostInfo->h_addr_list));
}
}
printf("%s--%s\n",ip,name);
//獲取socketServer對象
SOCKET sockSrv socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr htonl(INADDR_ANY); //設置監聽地址
addrSrv.sin_family AF_INET; //監聽類型
addrSrv.sin_port htons(6000); //監聽端口
bind(sockSrv,(SOCKADDR*)
listen(sockSrv,10);
SOCKADDR_IN addrClient;
int lensizeof(SOCKADDR);
while(true)
{
//開始接受數據等待
SOCKET sockConn accept(sockSrv,(SOCKADDR*)
char recvBuf[266] {0};
recv(sockConn,recvBuf,266,0);
std::cout < } //關閉套接字 closesocket(sockSrv); WSACleanup(); } 當然還要加入WS2_32.LIB文件。 客戶端代碼如下 import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; public class ClientSocket extends Socket{ Socket socket; /** * 構造 */ public ClientSocket(String ip , int port){ try { socket new Socket(ip, port); System.out.println("連接建立成功: site:" ip " port:"port); } catch (UnknownHostException e) { System.out.println("失敗"); e.printStackTrace(); } catch (IOException e) { System.out.println("失敗"); e.printStackTrace(); }
}
public String send(String msg)
{
try {
System.out.println("發送的內容" msg);
PrintWriter out new PrintWriter(socket.getOutputStream());
out.print(msg);
out.flush();
return null;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void close()
{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws SocketException {
ClientSocket socket new ClientSocket("127.0.0.1", 6000);
socket.send("zhouxuguang");
socket.close();
System.out.println(socket.getReceiveBufferSize());
System.out.println(socket.getSendBufferSize());
}
}
測試結果如下
客戶端
連接建立成功: site:127.0.0.1 port:6000
發送的內容zhouxuguang
8192
8192
服務器端
當然這只是簡單的字符串數據傳輸複雜的消息結構體的傳輸還有待進一步研究。下一步要研究android上怎麼與VC通信。

