c++代码:
#pragma comment(lib,"ws2_32.lib")
#include<WinSock2.h>
#include<stdio.h>
void main(){
WORD wVersionRequested;//高位字节指定所需要的Winsock库的副本,低位字节则是主版本
WSADATA wsaData;//包含库版本有关信息的结构体
int err;
wVersionRequested = MAKEWORD(1,1);//使用这个函数方便的获得wVersionRequested值,x高位字节,y低位字节
//加载套接字库,确定要使用套接字库的版本
err = WSAStartup(wVersionRequested,&wsaData);//wVersionRequested:该参数用于指定准备加载的Winsock库的版本,wsaData:指向WSADATA的结构体指针
if(0!=err)return;
if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1){
WSACleanup();//如果返回的版本与设定的版本不同,终止对Winsock库的使用
return;
}
/**创建一个套接字(相当于java中的Socket),第一个参数指定地址族,对于TCP/IP协议的套接字,它只能是AF_INET/PF_INET
第二个参数指定Socket类型,对于1.1版本的Socket,只支持两种类型的套接字,SOCK_STREAM指定产生流式的套接字(TCP)
SOCK_DGRAM产生数据包(UDP)套接字。第三个参数是特定的地址家族相关的协议,如果指定为0,那么他就会根据地址格式与套接字类别
自动选择一个合适的协议(推荐)
*/
SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrSrv;//创建一个与套接字地址有关的对象(该结构体存放了与本地地址信息)
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//指定为INADDR_ANY允许套接字想任何分配给本地机器的IP地址发送火接收数据
addrSrv.sin_family = AF_INET;//地址家族,必须设置为AF_INET
addrSrv.sin_port = htons(6000);//指定端口
bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//在本地地址上关联一个套接字接口
listen(sockSrv,5);//在该端口上监听
SOCKADDR_IN addrClient;//客户端的套接字
int len = sizeof(SOCKADDR);
char sendBuf[100];//消息缓存区
char recvBuf[100];
char tempBuf[100];
SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);//得到客服端的连接
printf("%s\n","有客服端连接上来啦");
sprintf(sendBuf,"Welcome %s to chat",inet_ntoa(addrClient.sin_addr));//把字符串写到消息缓存区
//send(sockConn,sendBuf,strlen(sendBuf)+1,0);//把消息发送给客户端
sendto(sockConn,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
while(1){
//接收消息
char recvBuf[100];
recv(sockConn,recvBuf,100,0);
if((recvBuf[0]=='q')&&(recvBuf[1]=='u')&&(recvBuf[2]=='i')&&(recvBuf[3]=='t'))
{
printf("%s\n","Chat end!");
break;
}
printf("%s\n",recvBuf);
printf("%s\n","Please input data:");
gets(sendBuf);
//send(sockConn,sendBuf,strlen(sendBuf)+1,0);//把消息发送给客户端
sendto(sockConn,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrSrv,len);
//WSACleanup();
}
closesocket(sockConn);
}
java代码:
package com.c.client;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
public class CClient {
private Socket s = null;
private InputStream ins = null;
private OutputStream ous = null;
private BufferedReader br = null;
private byte[] buf = new byte[1024];
private String msg = null;
public void start() throws Exception {
s = new Socket("127.0.0.1", 6000);
ins = s.getInputStream();
ous = s.getOutputStream();
while (true) {
int i = 0, j = 0;
for (j = 0; (i = ins.read()) != -1; j++) {
if (i == '\0')
break;
buf[j] = (byte) i;
}
msg = new String(buf, 0, j);
if(msg.startsWith("quit")){
ous.write("quit\0".getBytes());
break;
}
System.out.println(msg);
br = new BufferedReader(new InputStreamReader(System.in));
ous.write((br.readLine() + '\0').getBytes());
}
br.close();
ous.close();
ins.close();
}
public static void main(String arg[]) {
try {
new CClient().start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
相关推荐
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...
通过分析和学习这些代码,开发者可以更好地理解和掌握Java和C++间的网络通信技术。 总之,Java使用非阻塞Socket与C++通信是一个涉及到多线程、网络编程、数据序列化和并发处理等多个技术领域的复杂过程。理解并熟练...
Java和C++作为两种广泛使用的编程语言,它们之间的Socket通信是跨平台交互的一种常见实践。本文将深入探讨如何在Java和C++之间通过Socket进行结构体的发送与接收。 首先,我们需要理解Socket通信的基本原理。Socket...
Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景。Socket是计算机网络中的一个通信协议,它允许不同操作系统上的应用程序之间建立连接并交换数据。在这个场景中,Java作为客户端,C++作为服务端,两者...
本文将深入解析Binder在Java层和C++层的实现,并通过一个简单的模拟示例来阐述如何在不同进程中进行通信。 首先,让我们了解Binder的基本原理。在Java层,Binder是`android.os.Binder`类的一个实例,它作为接口暴露...
本项目就是一个关于如何实现Java和C++之间通信的实例,它包含两个部分:Java客户端和C++服务端。 首先,我们要了解Java和C++通信的基本原理。通常,这种通信可以通过多种方式实现,例如通过网络套接字(Sockets)、...
本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...
Java和C++之间进行Socket通信时,可能会遇到乱码问题,主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C++在Windows XP环境下可能使用GBK编码。解决这个问题的关键在于确保数据在传输过程中保持正确的...
* C++ 中对类的定义与 Java 有些不同,其中的 public 和 private 部分是分开的,而 Java 中,每一个元素都必须标明 public 或 private。 * C++ 中类的定义只包含函数的声明,真正的实现另外单独列出。 * 访问函数...
在IT行业中,跨语言通信是常见的需求,尤其是在Java和C++这样的不同编程环境中。本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description ...
在IT行业中,网络通信是构建分布式系统的关键技术之一。本话题将探讨如何使用C++客户端与Java(通过Netty框架)服务器端实现TCP通讯,并涉及数据序列化工具Protocol Buffers(protobuf)在两者之间的交互。 首先,...
本主题聚焦于“Java调用C++动态库”,这是一个关键的技术,它允许Java应用程序利用C++编写的高效库,比如图形处理、硬件驱动或者算法实现等。这种技术主要依赖于Java Native Interface (JNI),它是Java平台标准的一...
Visual C++网络通信开发入门与编程实践》从介绍通信基础知识和VC++基本编程模型开始,通过众多的小实例来贯穿讲解晦涩的基础知识;然后按照通信协议层展开,将通信协议层和实际应用结合,让读者在学习“基幢后学习中...
Java调用C++类对象是一种跨语言交互技术,主要用于利用Java的平台独立性和C++的高性能。这种技术通常依赖于Java Native Interface (JNI),它允许Java代码直接调用本地(如C++)代码,反之亦然。下面我们将深入探讨...
在IT行业中,网络通信是至关重要的一个领域,特别是在分布式系统和跨平台应用中。本示例探讨了如何使用C++实现服务器端,并用Java编写客户端,通过Socket进行通信。Socket编程是网络编程的基础,它允许两个不同的...
"使用JAVA编写网络通信程序" 网络通信程序的基本概念 在客户/服务器模式中,服务器端负责数据和图像等的存储、维护、管理以及传递,而客户端则负责人机界面的操作、送出需求及显示收回的数据。在这种模式下,...
标题中的“在Java与C++间应用Activemq”指的是使用Apache ActiveMQ这一开源消息代理在Java和C++编程语言之间构建通信桥梁。ActiveMQ是Java Message Service (JMS) 的实现,允许分布式系统中的组件通过消息传递进行...
通过这种方式,C++和Java之间可以实现无缝通信,允许我们充分利用两种语言的优点。这种技术广泛应用于游戏开发、高性能计算、嵌入式系统等领域,使得开发者能够灵活地选择最合适的语言来解决特定问题。
在IT行业中,跨语言通信是一项常见的任务,尤其是在Java和C++这样的组合中。Java和C++各有优势,Java以其高效、跨平台的特性受到青睐,而C++则以底层控制和性能著称。当我们需要利用Java的平台独立性和C++的高性能时...
《Visual C++网络通信编程实用案例精选》是一本专注于利用Microsoft Visual C++进行网络通信程序开发的书籍。这本书提供了丰富的实例,旨在帮助开发者理解和掌握如何在C++环境中实现网络通信功能。配套源码包含了...