首页 > 编程语言 >C++ 服务端与 Java 客户端的简单连接

C++ 服务端与 Java 客户端的简单连接

时间:2023-11-26 23:45:48浏览次数:40  
标签:PrintWriter java socket C++ --- Java include 服务端 客户端

记录一下如何用两种语言简单通信,(其实也大差不差的,应该把。。。)

// C++ 服务端
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

#include <iostream>
#include <cstring>

using std::cout;
using std::endl;
using std::string;

void Error(string msg) {
    cout << msg << " " << strerror(errno) << endl;
}

int main()
{
    cout << "---服务器启动---" << endl;
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("0.0.0.0");
    addr.sin_port = htons(26119);
    if (bind(sock, (sockaddr*)&addr, sizeof(addr)) == -1) {
        Error("绑定失败");
    }

    if (listen(sock, 255) == -1) {
        Error("监听失败");
    }

    int client = accept(sock, 0, 0);
    if (client == -1) {
        Error("接收失败");
    }
    char* buffer = new char;
    int len = recv(client, buffer, 0xff, 0);
    cout << "有客户端连接,接收数据为:" << buffer << ",长度: " << len <<  endl;

    cout << "发送数据" << endl;

    char* buff = "hello this is came form C++";
    send(client, buff, strlen(buffer), 0);


    close(sock);
    cout << "---服务端关闭---" << endl;
    return 0;
}
// Java 客户端
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class Test {
    public static void main(String[] args) {
        System.out.println("---客户端启动---");
        try{
            Socket socket = new Socket("120.24.177.154",26119);
            //使用PrintWriter和BufferedReader进行读写数据
            PrintWriter pw = new PrintWriter(socket.getOutputStream());
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            
            //发送数据
            pw.println("hello, this's come from java socket");
            pw.flush();
            
//          //接收数据
            String line = is.readLine();//readLine必须有结尾,比如\n换行,否则会一直读下去,触发超时
            System.out.println("received from server " + line);
            
            //关闭资源
            pw.close();
            is.close();
            socket.close();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        System.out.println("---客户端关闭---");
    }
}

标签:PrintWriter,java,socket,C++,---,Java,include,服务端,客户端
From: https://www.cnblogs.com/yueyingyifeng/p/17858228.html

相关文章

  • C语言调用C++类成员函数讲解和实例
    原文:https://blog.csdn.net/LxXlc468hW35lZn5/article/details/1257010071、问题成因C语言与C++调用问题原因主要在于C编译器和C++编译器的不同。C是过程式语言,C编译器编译后,函数在符号库中就是函数名,没有其他任何附加信息。而C++是对象式语言,支持函数重载,C++编译器编译后,在符号......
  • 【C与C++的相互调用方法】
    原文:https://blog.csdn.net/qq_43899283/article/details/132343699C与C++的相互调用方法C与C++为什么相互调用的方式不同C++中调用CC中调用C++致谢C与C++为什么相互调用的方式不同  C和C++之间的相互调用方式存在区别,主要是由于C和C++语言本身的设计和特性不同。函数......
  • extern "C":实现C++和C的混合编程
    原文:https://c.biancheng.net/view/8064.html通过《C语言和C++到底有什么关系?》一节的学习,读者已经了解了C++和C语言之间的关系。简单的理解,C++就是在C语言的基础上增加了一些新特性,从大的方面讲,C++不仅支持面向过程编程,还支持面向对象编程和泛型编程;从小的方面讲,C++还......
  • Java开发者的Python快速进修指南:自定义模块及常用模块
    好的,按照我们平常的惯例,我先来讲一下今天这节课的内容,以及Java和Python在某些方面的相似之处。Python使用import语句来导入包,而Java也是如此。然而,两者之间的区别在于Python没有类路径的概念,它直接使用.py文件的文件名作为导入路径,并将其余的工作交给Python解释器来扫描和处理。另......
  • docker构建打包java项目
    docker构建打包java项目简介本项目用于研究和实践docker的工作流部署发布查看github源码技术栈spring-web(RESTAPI请求交互)redis(用于实验多容器通信)mavendocker常用命令docker--help可查看帮助指令查看镜像列表dockerimagels查看容器列表docker......
  • 透析Java本质的36个话题02运算符与表达式
    1.莫衷一是——i+++j该如何计算?三个加号​ 在java中默认前面结合也就是(i++)+jinti=25;intj=2;intresult=i+++j;System.out.println(i);System.out.println(j);/*262*/贪心规则编译器的贪心规则,分析符号......
  • 透析Java本质的36个话题第四章 04构造器与变量(不全)
    1.相差无几-main方法很“特殊”吗?1.main方法的重载。2.调用main方法。3.继承main方法。4.隐藏main方法。5.main方法抛出异常。6.带有类型参数。main方法的重载​ 可以编译通过,但是找不到程序入口publicstaticvoidmain(){}staticvoidmain(){}......
  • Java设计模式之命令模式
    命令模式介绍命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。下......
  • Java learning Day2 常量 变量 运算符 Scanner 方法 数组
    常量:字面值常量(直接写值的常量)+自定义常量变量:long型变量后必须加L;小数字面值常量默认double 若用float需加F;变量强转:小的会自动转成大的float虽然只有4个字节但是比所有整型的取值范围都大    浮点型有精度问题  表达式类型提升:如果表达式当中存在多种数......
  • 透析Java本质的36个话题03String类
    1.来龙去脉-“+”是怎么连接字符串的?“+”号对String对象的连接OracleJDK1.7的实现: 当使用+字符串拼接,会创建一个临时的StringBuilder对象,该对象调用append连接操作。 类似于StringBuilder.append(s1).append(s2).toString;"+"的性能如果是在循环中对String对象进......