【网络编程6】Java与C语言套接字Socket通信的例子

简介: 继上一篇博客《Java与Python套接字Socket通信的例子》,今晚又完成了Java与C语言套接字通信过程,经过一些调试,最后成功了。Github根链接是:https://github.

继上一篇博客《Java与Python套接字Socket通信的例子》,今晚又完成了Java与C语言套接字通信过程,经过一些调试,最后成功了。Github根链接是:https://github.com/1040003585/javanettextbook/tree/master/Java_C
   ——惠州学院13网络工程 吴成兵 20160625

目录

一 特别说明

1.1 C语言写客户端特别说明

  • fgets(message,30,stdin);:用fgets输入数据

1.2 Java服务器端特别说明

1.2.1 接收数据特别说明

BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String string=br.readLine();
if(string==null)continue;       

1.2.2 发送数据特别说明

PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);
pw.println(string);

二 操作运行

2.1 操作步骤

  1. 确保linux系统安装了Java JDK和gcc,即在Terminal终端中输入“java”、“javac”和“gcc”有正常反馈效果。
  2. 在同一个目录下,新建Server.java文件,并存放Java服务器端代码放;新建client.c,并存放C代码。
  3. 在该目录打开Terminal终端,输入javac Server.java,编译服务器端代码,生成Server.class;输入gcc client.c -o client,编译客户端代码,生成client可运行文件。
  4. 输入java Server运行服务器端,输入./client 127.0.0.1 9955运行客户端。

2.2 运行截图

Java与C语言套接字Socket通信的例子

三 源代码

3.1 C语言写客户端代码

/*************************************************************************
    > File Name: client.c
    > Author: Wu_Being
    > Mail: 1040003585@qq.com 
    > Created Time: 2016年06月25日 01:30
    > Description: 
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>

void error_handling(char *message);

int main(int argc, char *argv[])
{
    int server_sock;
    struct sockaddr_in server_addr;

    char message[30];
    int str_len = 0;

    if(3 != argc){
        printf("Usage : %s <IP> <Port> \n", argv[0]);
        exit(1);
    }

    server_sock = socket(PF_INET, SOCK_STREAM, 0);
    if(-1 == server_sock){
        error_handling("socket() error!");
        exit(1);
    }

    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = inet_addr(argv[1]);
    server_addr.sin_port = htons(atoi(argv[2]));

    if( -1 == connect(server_sock, (struct sockaddr*)&server_addr,
                      sizeof(server_addr)) ){
        error_handling("connect() error!");
    }

    printf("C:connect to server success...\n");
    printf("C:input data(with 'end' for exit the programing)\n");

    int goon=1;
    //建立连接之后的处理逻辑
    while(goon){
        printf("C:please input the data :");
        memset(message, 32, sizeof(message));
        //scanf("%s",message);//unsuccess!!!
        fgets(message,30,stdin);//success...

        printf("C:send the data: %s",message);  
        write(server_sock, message, strlen(message));

        str_len = read(server_sock, message, 30-1);
        message[str_len]=0;
        if(-1 == str_len){
            error_handling("read() error!");
        }
        //printf("%d\n",str_len);
        if(strncmp("end",message,3)==0){
            goon=0;
            printf("C:end....\n\n");
        }   
        else{
            printf("C:Message from server : %s \n", message);
        }
    }
    //断开连接,关闭套接字
    close(server_sock);

    return 0;
}

void error_handling(char *message)
{
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}

3.2 Java服务器端代码

import java.io.*;
import java.net.*;
import java.util.*;


public class Server {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println("Swait for connect......");
        try {
            ServerSocket serverSocket = new ServerSocket(9955);
            Socket socket=serverSocket.accept();
            System.out.println("S connet from:"+socket.getInetAddress().getHostAddress());

            //DataInputStream dis=new DataInputStream(socket.getInputStream());//dis.readUTF();// un success!
            //DataOutputStream dos=new DataOutputStream(socket.getOutputStream());//dos.writeUTF(string);dos.flush();

            BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));//br.readLine();// success...
            PrintWriter pw=new PrintWriter(socket.getOutputStream(),true);//pw.println(string);

            boolean goon=true;
            while(goon){        
                //String string=dis.readUTF();
                String string=br.readLine();
                if(string==null)continue;
                System.out.print("S:receive data:("+string+")");    
                if(string.equals("end")==false){
                    string=dealWith(string);
                    //dos.writeUTF(string); 
                    //dos.flush();  
                    pw.println(string);
                    System.out.println(" ,S:计算结果("+string+") sent...");
                }else{
                    goon=false;
                    //dos.writeUTF("end");
                    //dos.flush();
                    pw.println("end");
                    System.out.println("\n");                   
                }

            }

            serverSocket.close();
            //dis.close();
            //dos.close();
            br.close();
            pw.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static String dealWith(String string){
        double radius=0.0;
        try {
            radius=Double.parseDouble(string);          
        } catch (NumberFormatException e) {
            return "NumberFormatException";
        }
        if(radius<0)return "data can't less 0";
        double area=radius*radius*Math.PI;
        return Double.toString(area);
    }

}

文中所有源代码

Wu_Being博客声明:本人博客欢迎转载,请标明博客原文和原链接!谢谢!
《Java与C语言套接字Socket通信的例子》:
http://blog.csdn.net/u014134180/article/details/51756851

Wu_Being 吴兵博客接受赞助费二维码

如果你看完这篇博文,觉得对你有帮助,并且愿意付赞助费,那么我会更有动力写下去。

目录
相关文章
|
26天前
|
Java 程序员
JAVA程序员的进阶之路:掌握URL与URLConnection,轻松玩转网络资源!
在Java编程中,网络资源的获取与处理至关重要。本文介绍了如何使用URL与URLConnection高效、准确地获取网络资源。首先,通过`java.net.URL`类定位网络资源;其次,利用`URLConnection`类实现资源的读取与写入。文章还提供了最佳实践,包括异常处理、连接池、超时设置和请求头与响应头的合理配置,帮助Java程序员提升技能,应对复杂网络编程场景。
49 9
|
26天前
|
人工智能 Java 物联网
JAVA网络编程的未来:URL与URLConnection的无限可能,你准备好了吗?
随着技术的发展和互联网的普及,JAVA网络编程迎来新的机遇。本文通过案例分析,探讨URL与URLConnection在智能API调用和实时数据流处理中的关键作用,展望其未来趋势和潜力。
43 7
|
26天前
|
Java 开发者
JAVA高手必备:URL与URLConnection,解锁网络资源的终极秘籍!
在Java网络编程中,URL和URLConnection是两大关键技术,能够帮助开发者轻松处理网络资源。本文通过两个案例,深入解析了如何使用URL和URLConnection从网站抓取数据和发送POST请求上传数据,助力你成为真正的JAVA高手。
47 11
|
26天前
|
安全 Java API
深入探索Java网络编程中的HttpURLConnection:从基础到进阶
本文介绍了Java网络编程中HttpURLConnection的高级特性,包括灵活使用不同HTTP方法、处理重定向、管理Cookie、优化安全性以及处理大文件上传和下载。通过解答五个常见问题,帮助开发者提升网络编程的效率和安全性。
|
26天前
|
JSON 安全 算法
JAVA网络编程中的URL与URLConnection:那些你不知道的秘密!
在Java网络编程中,URL与URLConnection是连接网络资源的两大基石。本文通过问题解答形式,揭示了它们的深层秘密,包括特殊字符处理、请求头设置、响应体读取、支持的HTTP方法及性能优化技巧,帮助你掌握高效、安全的网络编程技能。
48 9
|
26天前
|
JSON Java API
JAVA网络编程新纪元:URL与URLConnection的神级运用,你真的会了吗?
本文深入探讨了Java网络编程中URL和URLConnection的高级应用,通过示例代码展示了如何解析URL、发送GET请求并读取响应内容。文章挑战了传统认知,帮助读者更好地理解和运用这两个基础组件,提升网络编程能力。
45 5
|
1月前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
38 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
30天前
|
Java
[Java]Socket套接字(网络编程入门)
本文介绍了基于Java Socket实现的一对一和多对多聊天模式。一对一模式通过Server和Client类实现简单的消息收发;多对多模式则通过Server类维护客户端集合,并使用多线程实现实时消息广播。文章旨在帮助读者理解Socket的基本原理和应用。
23 1
|
1月前
|
网络协议 安全 Java
Java Socket原理
Java Socket原理是指在Java中通过Socket实现的网络通信的基础理论与机制。Socket是网络中不同设备间通信的一种标准方式,它允许应用程序之间通过TCP/IP等协议进行数据交换。在Java中,利用Socket编程可以方便地创建客户端与服务器端应用,实现跨网络的数据传输功能,是互联网软件开发中的重要技术之一。它支持多种通信模式,如可靠的流式套接字(TCP)和数据报式套接字(UDP)。
|
9天前
|
Java 开发者
Java多线程编程中的常见误区与最佳实践####
本文深入剖析了Java多线程编程中开发者常遇到的几个典型误区,如对`start()`与`run()`方法的混淆使用、忽视线程安全问题、错误处理未同步的共享变量等,并针对这些问题提出了具体的解决方案和最佳实践。通过实例代码对比,直观展示了正确与错误的实现方式,旨在帮助读者构建更加健壮、高效的多线程应用程序。 ####
下一篇
无影云桌面