Java C++ Socket通讯
import java.net.*;
import javax.swing.plaf.SliderUI;
/**
* 与c语言通信(java做client,c/c++做server,传送一个结构)
*
*/
public class Employee {
private byte[] buf = new byte[28]; // 为说明问题,定死大小,事件中可以灵活处理
/**
* 将int转为低字节在前,高字节在后的byte数组
*/
private static byte[] tolh(int n) {
byte[] b = new byte[4];
b[0] = (byte) (n & 0xff);
b[1] = (byte) (n >> 8 & 0xff);
b[2] = (byte) (n >> 16 & 0xff);
b[3] = (byte) (n >> 24 & 0xff);
return b;
}
/**
* 将byte数组转化成String
*/
private static String toStr(byte[] valArr,int maxLen) {
int index = 0;
while(index < valArr.length && index < maxLen) {
if(valArr[index] == 0) {
break;
}
index++;
}
byte[] temp = new byte[index];
System.arraycopy(valArr, 0, temp, 0, index);
return new String(temp);
}
/**
* 将低字节在前转为int,高字节在后的byte数组
*/
private static int vtolh(byte[] bArr) {
int n = 0;
for(int i=0;i<bArr.length&&i<4;i++){
int left = i*8;
n+= (bArr[i] << left);
}
return n;
}
public String name = "";
public int id = 0;
public float salary = 0;
/**
* 将float转为低字节在前,高字节在后的byte数组
*/
private static byte[] tolh(float f) {
return tolh(Float.floatToRawIntBits(f));
}
private static Employee getEmployee(byte[] bArr) {
String name = "";
int id = 0;
float salary = 0;
byte[] temp = new byte[20];
name = toStr(bArr,20);
System.arraycopy(bArr, 20, temp, 0, 4);
id = vtolh(temp);
return new Employee(name, id, salary);
}
/**
* 构造并转换
*/
public Employee(String name, int id, float salary) {
this.name = name;
this.id = id;
this.salary = salary;
byte[] temp = name.getBytes();
System.arraycopy(temp, 0, buf, 0, temp.length);
temp = tolh(id);
System.arraycopy(temp, 0, buf, 20, temp.length);
temp = tolh(salary);
System.arraycopy(temp, 0, buf, 24, temp.length);
}
/**
* 返回要发送的数组
*/
public byte[] getbuf() {
return buf;
}
/**
* 发送测试
*/
public static void main(String[] args) {
try {
int index = 0;
byte[] receive = new byte[28];
while(true){
Socket sock = new Socket("localhost", 5050);
System.out.println("send content: name=kingfish "+"value="+(1+index));
sock.getOutputStream().write(new Employee("kingfish"+index, 1+index++, 10.99f + index).getbuf());
sock.getInputStream().read(receive);
Employee ee = getEmployee(receive);
printHexString(receive);
System.out.println(" response: name="+ee.name+" "+"value="+ee.id);
sock.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
*输出十六进制
*/
private static void printHexString(byte[] b){
String sd ="";
for(int i=0;i<b.length;i++){
String hex = Integer.toHexString(b[i] & 0xFF);
if(hex.length() == 1){
hex = '0' + hex;
}
sd = sd + hex.toUpperCase();
}
char[] strChar = sd.toCharArray();
for(char aa:strChar){
System.out.print(aa);
}
System.out.println("");
}
}
----------------------------------------------------------------------------------------
#include<iostream>
#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <WINSOCK2.H>
using namespace std;
struct UserInfo {
int age;
char UserName[20];
int UserId;
};
struct Employee {
UserInfo user;
float salary;
};
namespace EP
{
void func()
{
WSADATA wsaData;
char buf[1024];
int nBytes = 1024, recvbytes;
SOCKET Listening;
SOCKET NewConnection;
SOCKADDR_IN ServerAddr;
SOCKADDR_IN ClientAddr;
int ClientAddrLen = sizeof(ClientAddr);
int Port = 5050;
//int c;
WSAStartup(MAKEWORD(2, 2), &wsaData);
Listening = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY);
ServerAddr.sin_port = htons(Port);
bind(Listening, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr));
listen(Listening, 5);
printf("Wating accpet....\n");
while (true) {
NewConnection = accept(Listening, (SOCKADDR *)&ClientAddr, &ClientAddrLen);
printf("Wating recv.....\n");
if ((recvbytes = recv(NewConnection, buf, nBytes, 0)) == SOCKET_ERROR)
{
printf("\nErrorcode=%d, Recv from client\n", WSAGetLastError());
//return 0;
}
Employee *data = new Employee;
data = (Employee *)&buf;
printf("Userid: %d Username: %s Salary: %f", data->user.UserId, data->user.UserName, data->salary);
data->user.UserId = 006;
//data->user.age = 23;
strcpy_s(data->user.UserName, "Test");
data->salary = 800;
send(NewConnection, buf, recvbytes, 0);
}
//return 0;
}
}
#pragma warning(disable:4996)
int main(void)
{
EP::func();
system("pause");
return 0;
}
转自:http://blog.csdn.net/nupt123456789/article/details/8047619
Java C++ Socket通讯的更多相关文章
- erlang和java的socket通讯----最简单,初次实现。
直接上源码,留做纪念. 有点简单,大家不要笑,初次实现. 功能描述:java发送数据给erlang,erlang将收到的数据重复两次再发送给java. erlang源码:模块tcp_listen -m ...
- Java Nio Socket通讯
Server端: #############服务器端连接请求处理############### public class MultiplexerServer implements Runnable { ...
- JAVA之Socket通讯
Server.java: Client.java Server console:(先启动服务器,再启动客户端) 服务器读取了客户端发来的hello server: Client console:客户 ...
- java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
- java socket通讯(一) 入门示例
一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯
Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...
- Socket通讯-Netty框架实现Java通讯
Netty简介 Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty ...
- java与C++之间进行SOCKET通讯要点简要解析
原文链接: http://blog.csdn.net/hslinux/article/details/6214594 java与C++之间进行SOCKET通讯要点简要解析 hslinux 0.篇外语 ...
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯(转)
先交待一下业务应用背景:服务端:移动交费系统:基于C语言的Unix系统客户端:增值服务系统:基于Java的软件系统通迅协议:采用TCP/IP协议,使用TCP以异步方式接入数据传输:基于Socket流的 ...
随机推荐
- Tomcat_总结_01_tomcat环境搭建
一.准备条件 1.安装jdk 二.安装tomcat 1.下载tomcat 去官网下载 64-bit Windows zip 版本的tomcat,并解压 https://tomcat.apache. ...
- gradle_学习_01_gradle安装与基本使用
一.下载安装 1.下载地址 官方下载地址: https://gradle.org/install/#manually 下载二进制文件,解压即可 2.环境变量配置 加入以下环境变量 GRADLE_HOM ...
- hadoop_异常_02_ExitCodeException exitCode=1: chmod: changing permissions of `/ray/hadoop/dfs/data': Operation not permitted
一.异常现象 启动hadoop时,datanode启动失败,出现如下异常: 2018-03-23 14:39:09,962 WARN org.apache.hadoop.hdfs.server.dat ...
- C/C++ 字符串与数字相互转换
一.利用stringstream类 1. 字符串到整数 stringstream sstr(str); int x; sstr >> x;(即从sstr中提取数据) ...
- [BZOJ5249][多省联测2018]IIIDX
bzoj luogu sol 首先可以把依赖关系转成一个森林.自下而上维护出每个点的\(size\),表示这关解锁以后一共有多少关. 考虑没有重复数字的情况. 直接从小往大贪心把每个数赋给当前已解锁的 ...
- CH5E02 [IOI1999]花店橱窗[暴力dp]
众所周知,这个人太菜了,所以她又来切水题了. 显然设计状态表示第$i$朵花放第$j$瓶中的最大价值.然后瞎转移一波是n三方的,加个前缀max变成n方就水过去了. 当然这题可以搜索剪枝的. 虐lyd书上 ...
- 五、python沉淀之路--字典
一. 1.根据序列,创建字典,并指定统一的值 v = dict.fromkeys(["],222) print(v) {': 222} 2.根据key 获取值,key不存在时,报错:get方 ...
- 关于一种fastjson的死循环情况记录
最近在一次项目中,使用fastjson做接口转换中,碰到了一个Stack Overflow.发现在getxxx方法内如果再次嵌套使用fastjson作json转换,就会无限循环. 错误实例: clas ...
- Quartz 定时任务(含Redis)
一 定时任务基础: MQ:Message Queue消息队列服务器:MSMQ.ActiveMQ.Redis等项目任务:确定邮件的发送,重置密码的发送(发送可能会很慢,而且有可能还需要重试),用消息队 ...
- STM32 -- 硬件知识
一.网站资源 1.http://www.stmcu.com.cn/ 二.硬件 1.BOOT0 和 BOOT1 1)一般BOOT0和BOOT1跳线都跳到0(地): 只是在ISP下载的情况下,BOO ...