C_JAVA_SOCKET_구조체 통신
//--------------------------------------------------
Server
#include <string.h>
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#define PORT 6331
#define BUFSIZE 1024
#define DFT_MAGIC_SIZE 5
unsigned char buf[BUFSIZE];
int readline(int , void *, int );
typedef struct{
char magic[DFT_MAGIC_SIZE];
int type;
int len;
}PHeader;
int main() {
int server_sd,client_sd;
int nbyte=0;
unsigned long client_len;
int i,j;
i=0;
struct sockaddr_in server_addr,client_addr;
bzero(&server_addr,sizeof(server_addr));
bzero(&client_addr,sizeof(client_addr));
bzero(buf,BUFSIZE);
memset((unsigned char*)&buf,0x00,BUFSIZE );
/* socket create */
if ( (server_sd=socket(AF_INET,SOCK_STREAM,0)) < 0 ) {
perror("Socket create error : ");
return -1;
}
server_addr.sin_family=AF_INET;
server_addr.sin_port=htons(PORT);
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
fprintf(stderr,"using PORT / [%d]\n",PORT);
if( bind(server_sd,(struct sockaddr*)&server_addr,sizeof(server_addr)) < 0) {
perror("socket bind error ");
close(server_sd);
return -1;
}
listen(server_sd,1);
client_len=sizeof(client_addr);
fprintf(stderr,"Waiting...\n");
if( (client_sd=accept(server_sd,(struct sockaddr *)&client_addr, &client_len)) < 0) {
perror("Accept Error ");
return -1;
}
else{
printf("client connect...\n");
}
fprintf(stderr,"client_sd : %d\n",client_sd);
PHeader * header;
//while(1) {
nbyte=read(client_sd, buf, BUFSIZE);
header = (PHeader *)buf;
fprintf(stderr,"[%d] read size : %d\n",i++,nbyte);
printf("magic : %s \n", header->magic );
printf("type : %d \n",ntohl( header->type ) );
printf("len : %d \n", ntohl( header->len ) );
bzero(buf,BUFSIZE);
memset((unsigned char*)&buf,0x00,BUFSIZE );
sleep(1);
strcpy(header->magic, "FWMGR");
header->type = 1;
header->len = 2;
write(client_sd, header, sizeof(PHeader));
//}
close(client_sd);
close(server_sd);
return 0;
}
//---------------------------------------------------
Client
import java.net.*;
import java.io.*;
import javolution.io.*;
public class Client{
Socket socket = null;
protected String host;
protected int port;
protected String cmd;
protected InputStream is;
protected OutputStream os;
public Client(String host, int port){
this.host = host;
this.port = port;
init();
start();
stop();
}
public synchronized void init(){
if(socket == null){
try{
socket = new Socket(host, port);
os = socket.getOutputStream();
is = socket.getInputStream();
}
catch(IOException ioe){
ioe.printStackTrace();
stop();
}
}
}
public void start(){
try{
Student header = new Student();
header.magic.set("FWMGR");
header.type.set(1);
header.len.set(2);
header.write(os);
header.read(is);
System.out.println(header.magic.get());
System.out.println(header.type.get());
System.out.println(header.len.get());
}
catch(IOException ioe){
ioe.printStackTrace();
stop();
}
}
public synchronized void stop(){
try{
socket.close();
is.close();
os.close();
}
catch(IOException e){
}
}
public static void main(String[] args){
Client client = new Client("127.0.0.1", 6331);
}
}
//---------------------------------------------------
Struct Class
import javolution.io.Struct;
public class Student extends Struct{
public UTF8String magic = new UTF8String(5);
public Signed32 type = new Signed32();
public Signed32 len = new Signed32();
}