`
司马飞
  • 浏览: 3769 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java和c++利用网络通信简单的一问一答例子

    博客分类:
  • java
阅读更多

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通信

    Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景,尤其在系统集成、设备通讯或者混合编程中。Socket提供了一种基于TCP/IP协议的进程间通信(IPC)方式,可以实现在不同操作系统上的进程之间的数据传输...

    java使用socket和c++通信

    通过分析和学习这些代码,开发者可以更好地理解和掌握Java和C++间的网络通信技术。 总之,Java使用非阻塞Socket与C++通信是一个涉及到多线程、网络编程、数据序列化和并发处理等多个技术领域的复杂过程。理解并熟练...

    Java和c++的Socket通信如何发送结构体

    Java和C++作为两种广泛使用的编程语言,它们之间的Socket通信是跨平台交互的一种常见实践。本文将深入探讨如何在Java和C++之间通过Socket进行结构体的发送与接收。 首先,我们需要理解Socket通信的基本原理。Socket...

    Java c++ socket通信

    Java和C++之间的Socket通信是跨语言网络编程的一个常见应用场景。Socket是计算机网络中的一个通信协议,它允许不同操作系统上的应用程序之间建立连接并交换数据。在这个场景中,Java作为客户端,C++作为服务端,两者...

    android 的binder机制在java、c++层的实现

    本文将深入解析Binder在Java层和C++层的实现,并通过一个简单的模拟示例来阐述如何在不同进程中进行通信。 首先,让我们了解Binder的基本原理。在Java层,Binder是`android.os.Binder`类的一个实例,它作为接口暴露...

    一个简单的java和c++通讯的小程序

    本项目就是一个关于如何实现Java和C++之间通信的实例,它包含两个部分:Java客户端和C++服务端。 首先,我们要了解Java和C++通信的基本原理。通常,这种通信可以通过多种方式实现,例如通过网络套接字(Sockets)、...

    java与C++互通加解密

    本次项目由于服务器之间需要通信加密,java和c++,自己只懂java,因此和同事(c)在网上找了好几个都测试不行,我们修改了其中一个,已通过测试,上传的是最基础的,需要复杂化的可自行修改。为了以后方便他人,贡献...

    java c++ 通信之间的乱码解决方法

    Java和C++之间进行Socket通信时,可能会遇到乱码问题,主要是由于编码格式不一致导致的。Java默认使用UTF-8编码,而C++在Windows XP环境下可能使用GBK编码。解决这个问题的关键在于确保数据在传输过程中保持正确的...

    从java到c++,适合java程序员快速学习c++

    * C++ 中对类的定义与 Java 有些不同,其中的 public 和 private 部分是分开的,而 Java 中,每一个元素都必须标明 public 或 private。 * C++ 中类的定义只包含函数的声明,真正的实现另外单独列出。 * 访问函数...

    java调用C++ webservice

    在IT行业中,跨语言通信是常见的需求,尤其是在Java和C++这样的不同编程环境中。本话题主要探讨如何使用Java调用由C++实现的Web服务(Webservice)。在给出的描述中,提到了通过WSDL(Web Services Description ...

    c++客户端和java(Netty)服务器端tcp通讯

    在IT行业中,网络通信是构建分布式系统的关键技术之一。本话题将探讨如何使用C++客户端与Java(通过Netty框架)服务器端实现TCP通讯,并涉及数据序列化工具Protocol Buffers(protobuf)在两者之间的交互。 首先,...

    Java调用C++动态库

    本主题聚焦于“Java调用C++动态库”,这是一个关键的技术,它允许Java应用程序利用C++编写的高效库,比如图形处理、硬件驱动或者算法实现等。这种技术主要依赖于Java Native Interface (JNI),它是Java平台标准的一...

    《Visual C++网络通信开发入门与编程实践》书中的源代码

    Visual C++网络通信开发入门与编程实践》从介绍通信基础知识和VC++基本编程模型开始,通过众多的小实例来贯穿讲解晦涩的基础知识;然后按照通信协议层展开,将通信协议层和实际应用结合,让读者在学习“基幢后学习中...

    Java调用c++类对象

    Java调用C++类对象是一种跨语言交互技术,主要用于利用Java的平台独立性和C++的高性能。这种技术通常依赖于Java Native Interface (JNI),它允许Java代码直接调用本地(如C++)代码,反之亦然。下面我们将深入探讨...

    C++写的服务器与Java写的客户端通过Socket通信C++代码

    在IT行业中,网络通信是至关重要的一个领域,特别是在分布式系统和跨平台应用中。本示例探讨了如何使用C++实现服务器端,并用Java编写客户端,通过Socket进行通信。Socket编程是网络编程的基础,它允许两个不同的...

    使用JAVA编写网络通信程序

    "使用JAVA编写网络通信程序" 网络通信程序的基本概念 在客户/服务器模式中,服务器端负责数据和图像等的存储、维护、管理以及传递,而客户端则负责人机界面的操作、送出需求及显示收回的数据。在这种模式下,...

    在Java与C++间应用Activemq

    标题中的“在Java与C++间应用Activemq”指的是使用Apache ActiveMQ这一开源消息代理在Java和C++编程语言之间构建通信桥梁。ActiveMQ是Java Message Service (JMS) 的实现,允许分布式系统中的组件通过消息传递进行...

    C++调用Java接口

    通过这种方式,C++和Java之间可以实现无缝通信,允许我们充分利用两种语言的优点。这种技术广泛应用于游戏开发、高性能计算、嵌入式系统等领域,使得开发者能够灵活地选择最合适的语言来解决特定问题。

    java调用c++demo(避免不必要的通信调用)

    在IT行业中,跨语言通信是一项常见的任务,尤其是在Java和C++这样的组合中。Java和C++各有优势,Java以其高效、跨平台的特性受到青睐,而C++则以底层控制和性能著称。当我们需要利用Java的平台独立性和C++的高性能时...

    《Visual C++网络通信编程实用案例精选》配套源码

    《Visual C++网络通信编程实用案例精选》是一本专注于利用Microsoft Visual C++进行网络通信程序开发的书籍。这本书提供了丰富的实例,旨在帮助开发者理解和掌握如何在C++环境中实现网络通信功能。配套源码包含了...

Global site tag (gtag.js) - Google Analytics