因为要用到,但发现Java怎么都收不到C发来的数据,除非C端自动挂掉,java会一口气全收回来。

后来才发现是因为C发过来的Java用readline是读不到回车的,所以会一直等待。

所以不要用readline(),这是不正确滴。

具体应该如下:

Java Server端:

 package jsi;

 import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket; public class MyServer { public ServerSocket server; public MyServer(){
new Thread(new Runnable(){
private ServerSocket server; @Override
public void run(){
try {
server = new ServerSocket(31003);
Socket socket = server.accept();
BufferedReader read = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
PrintWriter print = new PrintWriter(socket.getOutputStream());
while(true){
char[] cbuf = new char[70];
read.read(cbuf); // don't use : String msg = read.readline();
String msg = new String(cbuf);
if(msg.equals("bye")){
break;
}
print.write("OK");
print.flush();
double mm = Double.parseDouble(msg);
System.out.println(mm); }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }).start();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyServer();
} }

C++客户端:

/*
* Client.cpp
*
* Created on: 2013-11-29
* Author: root
*/ #include <errno.h>
#include <netinet/in.h> // for sockaddr_in
#include <sys/types.h> // for socket
#include <sys/socket.h> // for socket
#include <stdio.h> // for printf
#include <stdlib.h> // for exit
#include <string.h> // for bzero
#include <arpa/inet.h>
#include <unistd.h>
#include <string>
#define SERVER_PORT 31003
#define MAXDATA 50
int main(int argc, char **argv)
{
struct sockaddr_in client_addr;
bzero(&client_addr, sizeof(client_addr)); //set zero of this memory
client_addr.sin_family = AF_INET; //internet protocol
client_addr.sin_addr.s_addr = htons(INADDR_ANY); //INADDR_ANY means get the local address
client_addr.sin_port = htons(); //0 means get a free port int client_socket = socket(AF_INET, SOCK_STREAM, );
if (client_socket < )
{
printf("Create Socket Failed!\n");
exit();
}
//bind the socket and ip address of the client machine
if (bind(client_socket, (struct sockaddr*) &client_addr,
sizeof(client_addr)))
{
printf("Client Bind Port Failed!\n");
exit();
} //socket struct had the server_addr and server port
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
if (inet_aton("127.0.0.1", &server_addr.sin_addr) == )
{
printf("Server IP Address Error! \n");
exit();
}
server_addr.sin_port = htons(SERVER_PORT);
socklen_t server_addr_length = sizeof(server_addr);
if (connect(client_socket, (struct sockaddr*) &server_addr,
server_addr_length) < )
{
printf("Can Not Connect To localhost!\n");
exit();
}else
printf("connect successful! \n");
std::string buffer;
char buf[MAXDATA];
bool flag = false;
while(){
buffer = flag == true ? "" : "";
     if(write(client_socket,buffer.c_str(),buffer.length()) == -)
{
perror("send error!");
exit();
}
sleep();
flag = !flag;
if((recv(client_socket, buf, MAXDATA,)) == -)
{
perror("receive error!");
exit();
} printf("Received: %s\n",buf);
}
}

C++做client Java做客户端传送数据的更多相关文章

  1. 游戏引擎网络开发者的 64 做与不做 | Part 1 | 客户端方面

    摘要:纵观过去 10 年的游戏领域,单机向网络发展已成为一个非常大的趋势.然而,为游戏添加网络支持的过程中往往存在着大量挑战,这里将为大家揭示游戏引擎网络开发者的 64 个做与不做. [编者按]时下, ...

  2. Elasticsearch集群搭建及使用Java客户端对数据存储和查询

    本次博文发两块,前部分是怎样搭建一个Elastic集群,后半部分是基于Java对数据进行写入和聚合统计. 一.Elastic集群搭建 1. 环境准备. 该集群环境基于VMware虚拟机.CentOS ...

  3. 【转】Java做服务器开发语言

    版权声明:本文为博主原创文章,未经博主允许不得转载. 随着游戏市场的兴起,特别是网页游戏.手机游戏的崛起,对游戏开发技术的需求越来越多.网络游戏开发是一个庞大的体系,总体来说是客户端与服务器端.客户端 ...

  4. 简单通过java的socket&serversocket以及多线程技术实现多客户端的数据的传输,并将数据写入hbase中

    业务需求说明,由于公司数据中心处于刚开始部署的阶段,这需要涉及其它部分将数据全部汇总到数据中心,这实现的方式是同上传json文件,通过采用socket&serversocket实现传输. 其中 ...

  5. ajax实现用户登陆,退出,java做后端

    最近http老师布置了个任务,用cookie完成登陆,退出.Http老师讲的是node.js写后端,由于自己还是擅长java些,还是用Java做了. 以前跟着教程写过一个网站,当初是用jsp+serv ...

  6. 用java在客户端读取mongodb中的数据并发送至服务器

    使用Java自带的socket端口来实现,程序如下: Client.java package com.cn.gao; import java.net.*; import java.io.*; impo ...

  7. Java做acm所需要的基础知识之排序问题

    Java做acm所需要的基础知识. 以前做acm的题都是用C/C++来写代码的,在学习完Java之后突然感觉Java中的方法比C/C++丰富很多,所以就整理一下平时做题需要用到的Java基础知识. 1 ...

  8. Java Socket 服务端发送数据 客户端接收数据

    服务端: package com.thinkgem.wlw.modules.api.test.socket; /** * @Author: zhouhe * @Date: 2019/4/8 9:30 ...

  9. java做web项目比较多

    WEB就是轻量级:如果要炫,FLEX或即将普及的html5.0都能做到像C/S那样. java做web项目比较多:如果是桌面程序,还是走C/S比较成熟. 如果是B/S架构的,后台还是JAVA,前台可以 ...

随机推荐

  1. 连接池 druid(阿里巴巴的框架)

      引用自:http://blog.163.com/hongwei_benbear/blog/static/1183952912013518405588/ 说的是现在最好的连接池   注: 属性跟 d ...

  2. centos安装redis及php-redis扩展

    centos安装redis及php-redis扩展  Linux, WEB 七162012 今天公司同事要求在测试机上安装redis,并且要求让php安装上redis的扩展,redis是一个key-v ...

  3. 【转】tomcat下部署 solr 5.3.1

    本文转自:http://blog.csdn.net/lianghyan/article/details/49467207 solr下载: http://lucene.apache.org/solr/d ...

  4. 六间房 繁星 酷我 来疯 秀吧 新浪秀 直播播放器 Live 1.2

    适合用于进行录制的时候 特别说明: 安装 falsh play 19 时 不能正常播放 每个按钮都有提示,不详细说明 下载地址 http://pan.baidu.com/s/1i32ETIt 下载地址 ...

  5. 19.python笔记之Rabbitmq

    RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统.他遵循Mozilla Public License开源协议. MQ全称为Message Queue, 消息队列(MQ)是一种应用程序 ...

  6. [MAC] SVN lock的使用

    转载 : http://www.eefocus.com/czzheng/blog/12-03/245532_4ca94.html 如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自 ...

  7. Mysql 5.6.17-win64.zip配置

    第一大步:下载. a.俗话说:“巧妇难为无米之炊”嘛!我这里用的是 ZIP Archive 版的,win7 64位的机器支持这个,所以我建议都用这个.因为这个简单嘛,而且还干净. 地址见图 拉倒最下面 ...

  8. Android之shape属性详解

    有时候 ,为了满足一些需求,我们要用到 shape 去定义 一些背景,shape 的用法 跟图片一样 ,可以给View设置 Android:background="@drawable/sha ...

  9. 数字型 、String字符串转换

    Java代码 收藏代码 String str = "1,2,3,4,5,6" public int[] StringtoInt(String str) { int ret[] = ...

  10. iOS通过ASIHTTPRequest提交JSON数据

    先验知识——什么是ASIHTTPRequest? 使用iOS SDK中的HTTP网络请求API,相当的复杂,调用很繁琐,ASIHTTPRequest就是一个对CFNetwork API进行了封装,并且 ...