我在java中有c和客戶端中的服務器,但它不起作用。
1.運行服務器,服務器等待客戶端
2,運行客戶端 - 客戶端發送字符串
3.服務器獲取冷杉性格和增加它發送給客戶端//我想到這一點,但
服務器獲取一些錯誤的字符
4.client得到字符並把它寫在屏幕上//想到這一點,但客戶端會失敗,此
例外:
java通信中C客戶端中的TCP服務器
Exception in thread "main" java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2266)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2279)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at clientTCP.main(clientTCP.java:19)
5)客戶端應該結束和服務器繼續運行//但是客戶以前後下樓例外
有誰知道哪裏可能是問題?服務器,客戶端使用TCP協議。
服務器:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <netinet/in.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
int main()
{
int server_sockfd, client_sockfd;
int server_len, client_len;
struct sockaddr_in server_address;
struct sockaddr_in client_address;
server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
server_address.sin_family = AF_INET;
server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
server_address.sin_port = htons(10000);
server_len = sizeof(server_address);
if(bind(server_sockfd, (struct sockaddr *)&server_address, server_len) != 0)
{
perror("oops: server-tcp-single");
exit(1);
}
listen(server_sockfd, 5);
signal(SIGCHLD, SIG_IGN);
while(1)
{
char ch;
printf("server wait...\n");
client_len = sizeof(client_address);
client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
printf("Client connected \n");
if(fork() == 0)
{
read(client_sockfd, &ch, 1);
printf("Client send = %c\n", ch);
ch++;
sleep(5);
printf("Server send = %c\n", ch);
write(client_sockfd, &ch, 1);
close(client_sockfd);
exit (0);
}
else
close(client_sockfd);
}
}
客戶端在Java中:
import java.io.*;
import java.net.*;
class clientTCP
{
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
Socket socket = new Socket("127.0.0.1", 10000);
InetAddress adresa = socket.getInetAddress(); //address
System.out.print("Connecting on : "+adresa.getHostAddress()+" with hostname : "+adresa.getHostName()+"\n");
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
oos.writeObject("HalloXXXX");
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String message = (String) ois.readObject();
System.out.println("Message Received: " + message);
ois.close();
oos.close();
socket.close();
}
}