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

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

目录

  • 目录
  • 一 特别说明
    • 1 C语言写客户端特别说明
    • 2 Java服务器端特别说明
      • 21 接收数据特别说明
      • 22 发送数据特别说明
  • 二 操作运行
    • 1 操作步骤
    • 2 运行截图
  • 三 源代码
    • 1 C语言写客户端代码
    • 2 Java服务器端代码

一 特别说明

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 运行截图

三 源代码

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

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

时间: 2024-09-20 06:11:55

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

【网络编程5】Java与Python套接字Socket通信的例子

今天看一本Python黑客相关的书的第一章部分,边看边在Linux Ubuntu Kylin 32位系统的终端打Python代码,就基本会用Python语言了,包括socket内容.刚好我之前学习Java Socket通信,今天就试着用Python写客户端,并与Java服务器端通信,经过一些调试,最后成功了.Github根链接是:https://github.com/1040003585/javanettextbook/tree/master/Java_Python --惠州学院13网络工程 吴

Java网络编程菜鸟进阶:TCP和套接字入门

我竟然到现在才发现<Fundamental Networking in Java>这本神作,真有点无地自容的感觉.最近几年做的都是所谓的企业级开发,免不了和网络打交道,但在实际工作中,往往会采用框架将底层细节和上层应用隔离开,感觉就像是在一个 Word 模板表单里面填写内容,做出来也没什么成就感.虽然没有不使用框架的理由,但我还真是有点怀念当初直接用套接字做网络编程的日子,既能掌控更多东西,还可以学到更多知识,为研究框架的实现原理打基础.闲话完毕,转入今天的正题:IP(Internet Pro

【网络编程1】Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

[python] 专题七.网络编程之套接字Socket、TCP和UDP通信实例

        很早以前研究过C#和C++的网络通信,参考我的文章:                  C#网络编程之Tcp实现客户端和服务器聊天                 C#网络编程之套接字编程基础知识                 C#网络编程之使用Socket类Send.Receive方法的同步通讯        Python网络编程也类似.同时最近找工作笔试面试考察Socket套接字.TCP\UDP区别比较多,所以这篇文章主要精简了<Python核心编程(第二版)>第16章内

java网络编程错误java.net.ConnectException: Connection refused: connect求教

问题描述 java网络编程错误java.net.ConnectException: Connection refused: connect求教 刚开始学习java网络编程,在书上看到一段代码,就动手试一下,结果出现下面错误: java.net.ConnectException: Connection refused: connect 源代码如下: import java.io.*; import java.net.*; class lx01 { public static void main(S

《Python核心编程(第3版)》——2.3 套接字:通信端点

2.3 套接字:通信端点 本节将介绍套接字(socket),给出有关其起源的一些背景知识,并讨论各种类型的套接字.最后,将讲述如何利用它们使运行在不同(或相同)计算机上的进程相互通信. 2.3.1 套接字 套接字是计算机网络数据结构,它体现了上节中所描述的"通信端点"的概念.在任何类型的通信开始之前,网络应用程序必须创建套接字.可以将它们比作电话插孔,没有它将无法进行通信. 套接字的起源可以追溯到20世纪70年代,它是加利福尼亚大学的伯克利版本UNIX(称为BSD UNIX)的一部分.

如何编写简单的配合认证的基于JAVA套接字的通信程序

问题描述 我是一个初学者,现在正在编写一个配合认证的基于JAVA套接字的通信程序.老师要求:终端1和终端2要进行通信,必需通过第三台机器的简单认真.哪位高手帮帮忙吧!

Linux下套接字详解(二)----套接字Socket

在前面我们讲了TCP/IP.TCP和UDP的一些基本知识,但是协议只有一套,而我们系统多个TCP连接或多个应用程序进程必须通过同一个 TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口. 套接口可以说是网络编程中一个非常重要的概念,linux以文件的形式实现套接口,与套接口相应的文件属于sockfs特殊文件系统,创建一个套接口就是在sockfs中创建一个特殊文件,并建立起为实现套接口功能的相关数据结构

Java套接字(Socket)网络编程入门_java

网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www(万维网)就是建立在客户机/服务器模式上,以HTML语言和HTTP协议为基础,能够提供各种Internet服务的信息浏览系统.网络信息放在主机的不同位置,www服务器利用超文本链路链接各项信息.www客户机(浏览器Brower)负责与服务器建立联系,向服务器发送请求,处理HTML超媒体,提供图形用户