linux c、java socket json 通信

一、服务端 c++

[email protected]:~/Public/xtranfer$ cat ./main.c
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <unistd.h>
#include <stdlib.h>
#include <time.h>
#include <arpa/inet.h>
#include <string.h>
#include "cJSON/cJSON.h"

#define BUFFER_SIZE 255
#define SERVER_PORT 13579
#define LIGEN_OF_LISTEN_QUEUE 5

char* doit();

int main(int args, char** argv)
{
	const char* welcome = "welcome to shaoyongyang‘s server\n";
	const char* welcome_tip = "please input your id:\n";

	//init socket
	int servfd,clifd;
	struct sockaddr_in server_addr,client_addr;

	//test json
	const char *json = doit();

	if((servfd = socket(AF_INET,SOCK_STREAM,0)) < 0)
	{
		printf("socket create error!\n");
		exit(1);
	}

	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(SERVER_PORT);
	server_addr.sin_addr.s_addr = htons(INADDR_ANY);
	if(bind(servfd,(struct sockaddr*)&server_addr,sizeof(server_addr)) < 0) {
		printf("bind to port %d\n failure!", SERVER_PORT);
		exit(1);
	} 

	if(listen(servfd, LIGEN_OF_LISTEN_QUEUE) < 0) {
		printf("create listen failure!\n");
		exit(1);
	}

	while(1) {
		char buf[BUFFER_SIZE];
		long timestamp;
		socklen_t length = sizeof(client_addr);
		clifd = accept(servfd,(struct sockaddr*)&client_addr,&length);
		if(clifd < 0) {
			printf("accept error !\n");
			break;
		}
		//close and print message
		printf("from client IP:%s,Port:%d\n", inet_ntoa(client_addr.sin_addr),ntohs(client_addr.sin_port));
		timestamp = time(NULL);
		int x = strlen(json);

		printf("-- \n\n%s\n--", json);
		printf("-- send size:%d --\n", x);
		send(clifd,json,x,0);
		close(clifd);
	}
	close(servfd);
	doit();
}

char* doit()
{
	cJSON *root,*fmt,*img,*thm,*fld;char *out;int i; 
        root=cJSON_CreateObject();
        cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble"));
        cJSON_AddItemToObject(root, "format", fmt=cJSON_CreateObject());
        cJSON_AddStringToObject(fmt,"type",             "rect");
        cJSON_AddNumberToObject(fmt,"width",            1920);
        cJSON_AddNumberToObject(fmt,"height",           1080);
        cJSON_AddFalseToObject (fmt,"interlace");
        cJSON_AddNumberToObject(fmt,"frame rate",       24);
        out=cJSON_Print(root);  cJSON_Delete(root);     printf("%s\n",out);     free(out); 
	return out;
}
[email protected]:~/Public/xtranfer$

我引用的是cJSON

项目地址:https://github.com/kbranigan/cJSON

编译的时候需要执行

g++ cJSON/cJSON.c main.c -o main -lm

二、客户端 java

package com.divego.web.controller;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

/**
 * Created by shaoyongyang on 2015/5/25.
 */
public class SocketController {

    public static void main(String args[]) {
        try {
            Socket socket = new Socket("192.168.1.149", 13579);
            //向本机的4700端口发出客户请求
            BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
            //由系统标准输入设备构造BufferedReader对象
            PrintWriter os = new PrintWriter(socket.getOutputStream());
           //由Socket对象得到输出流,并构造PrintWriter对象
            BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            //由Socket对象得到输入流,并构造相应的BufferedReader对象
          //  System.out.println("i am recv the length:"+ is.readLine().);
            String info = null;
            while((info=is.readLine()) != null) {
                System.out.println(info);
            }
            //从Server读入一字符串,并打印到标准输出上
           os.close(); //关闭Socket输出流
           is.close(); //关闭Socket输入流
           socket.close(); //关闭Socket
        } catch (Exception e) {
            System.out.println("Error" + e); //出错,则打印出错信息
        }
    }
}

正如代码,客户端仅仅负责连接,读取数据。

总结:

如果我们把服务端加入,多线程,数据库操作, 缓存等等, 那么能不能理解为另一套数据层处理框架,c++的性能绝对是没法说的。all right, 继续琢磨吧。

顺带截几张图好了。

时间: 2024-12-30 00:07:12

linux c、java socket json 通信的相关文章

java socket报文通信(一)socket的建立

java socket报文通信(一) socket的建立  今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socke

java socket线程通信

关于socket线程通信的一些知识整理 一般我们需要要让两台机子进行通信,需要创建一个Server 类,一个Client类,还需要创建一个线程类 server public class Server { public static void main(String[] args) throws IOException {  ServerSocket ss = new ServerSocket(8888);  int num=0;  System.out.println("服务器即将启动,   等

Java Socket编程----通信是这样炼成的

Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 一.网络基础知识(参考计算机网络)            关于计算机网络部分可以参考相关博客:           <TCP/IP协议栈及OSI参考模型详解> http://wangdy.blog.51cto.com/3845563/

java socket报文通信(二)报文的封装

昨天我们谈了怎么建立socket通信的服务端和客户端,今天我们就来谈一谈怎么封装报文. 什么是报文这里我就不在阐述了,不清楚的朋友可以自己去查资料.我们今天要谈的报文主要友以下几个部分组成: 3位同步校验位+8位报文长度+报文头+报文体+32位MD5校验位 基本格式如下: 0X110X120X1300000232<?xml version="1.0" encoding="GBK"?><ROOT><Code>0204</Cod

java socket报文通信(三)java对象和xml格式文件的相互转换

前两节讲了socket服务端,客户端的建立以及报文的封装.今天就来讲一下java对象和xml格式文件的相互转换. 上一节中我们列举了一个报文格式,其实我们可以理解为其实就是一个字符串.但是我们不可能每次都去写字符串啊,这样的话肯定要疯.既然是面向对象的编程,肯定会有好的办法来解决这个问题.我们使用JAXBContext这个工具. package cn.com.egj.entity.shortcutTransfer.test; import java.io.BufferedReader; impo

Java Socket编程基础篇

原文地址:Java Socket编程----通信是这样炼成的 Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术.下面就让我们一起揭开Socket的神秘面纱. Socket编程 网络基础知识点: 两台计算机间进行通讯需要以下三个条件 IP地址.协议.端口号: IP地址:定位应用所在机器的网络位置.(比如家庭住址:北京市朝阳区XX街道XX小区) 端口号

linux下java程序与C语言程序通过SOCKET通信的简单例子

linux下java程序与C语言程序通过SOCKET通信的简单例子 今天上午实验了java程序与c语言程序通过socket进行通信.由于没学过java,因此只是编写了C语言端的代码,java端的代码是从网上别的文章中找的,经过少量修改后与C语言端程序通信成功. 本例中C语言端作为服务器,java端作为客户端 代码如下: /****************** server program *****************/ #include <stdio.h> #include <sy

Java Socket通信实现私聊、群聊

前言 闲言少叙,上代码! 代码编写 server服务端 /** * 服务端 */ public class Server { private static ServerSocket server = null; private static Socket ss = null; /** * 客户端集合 */ private static Map<String, ServerThread> serverThreadMap = new HashMap<String, ServerThread&

java socket通信-传输文件图片--传输图片

ClientTcpSend.java   客户端发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.net.InetSocketAddress; import java.net.Socket; public class ClientTcpSend { public static String clien