2013-12-17 3 views
2

Это мой код на стороне сервера. Я посылаю привет клиенту, который находится на JavaНевозможно принять данные с сервера

#include <stdio.h> 
#include <unistd.h> 
#include <string.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 
#include<errno.h> 
#include<arpa/inet.h> 

#define PORT 6865 
#define BUF 256 

int main(int argc, char *argv[]) 
{ 
struct sockaddr_in host, remote; 
int host_fd, remote_fd; 
int size = sizeof(struct sockaddr);; 

int read_t,i; 
char data[]="hello"; 

host.sin_family = AF_INET; 
host.sin_addr.s_addr = htonl(INADDR_ANY); 
host.sin_port = htons(PORT); 
memset(&host.sin_zero, 0, sizeof(host.sin_zero)); 

host_fd = socket(AF_INET, SOCK_STREAM, 0); 
if(host_fd == -1) { 
    printf("socket error %d\n", host_fd); 
    return 1; 
} 

if(bind(host_fd, (struct sockaddr *)&host, size)) { 
    perror("bind error is\n"); 
printf("errorno is %d\n",errno); 
    return 1; 
} 

if(listen(host_fd, 10)) { 
    printf("listen error"); 
    return 1; 
} 

printf("Server setup, waiting for connection...\n"); 
remote_fd = accept(host_fd, (struct sockaddr *)&remote, &size); 

printf("connection made\n"); 

//read_t = recv(remote_fd,data,sizeof(data),0); 
//data[read_t]='\0'; 
printf("read = %d, data = %s \n", sizeof(data), data); 
if(sendto(remote_fd,data,sizeof(data),0,NULL,1)==-1) 
{ 
    printf("error in sending back\n"); 
    return 1; 
} 
    read_t = recv(remote_fd,data,sizeof(data),0); 
data[read_t]='\0'; 
    printf("read = %d, received_data = %s \n", sizeof(data), data); 
shutdown(remote_fd, SHUT_RDWR); 
close(remote_fd); 

return 0; 
} 

Это код Java

package com.java.client; 

import java.io.BufferedInputStream; 
import java.io.DataInputStream; 
import java.io.DataOutputStream; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.Socket; 
import java.net.UnknownHostException; 
import java.nio.ByteBuffer; 
import java.nio.charset.Charset; 

    public class ClientFirst 
    { 
public static void main(String[] argv) throws UnknownHostException, IOException 
{ 
    char[] data = new char[10]; 
    Socket s = new Socket("10.9.79.80", 6865); 


    InputStreamReader ins= new InputStreamReader(s.getInputStream()); 
     int da= ins.read(data, 0, 9); 
     System.out.print(Integer.toString(da)); 

    } 
} 

Когда я пытаюсь получить данные от сервера гр я не получаю его. Вместо того, чтобы здороваться, я получаю 5.

ответ

1

Вы печатаете количество символов, считанных из потока, а не фактические данные. Попробуйте вместо этого:

int da = ins.read(data, 0, 9); 
System.out.print(data); 

Приветствия,

+1

@ Anders R. Bystrup Thanx Man – Sandeep

1

Попробуйте выполнить печать из data переменных, а не значения, возвращаемого InputStreamReader.read в переменной da, как это:

System.out.print(data); 

InputStreamReader.read вместо возвращает число прочитанных символов ,

+0

@ bobbel Thanx Buddy – Sandeep

0

da является 5, потому что вы читаете пять байтов из сокета. hello состоит из 5 байтов, поэтому все работает нормально. Полученные письма были сохранены в переменной data.

Смежные вопросы