我是相對較新的客戶端服務器編程,我試圖讓客戶端和服務器之間的簡單通信小程序gui,它現在工作,但我得到一個例外當我運行客戶端客戶端與服務器之間的小程序通信
修改後的代碼:
客戶:
import java.awt.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Client extends JApplet{
/**
*
*/
private static final long serialVersionUID = 1L;
private JTextArea displayArea;
private Socket socket = null;
private DataInputStream input;
private DataOutputStream output;
public void init()
{
Container container = getContentPane();
// set up JTextArea to display
displayArea = new JTextArea();
displayArea.setEditable(false);
container.add(new JScrollPane(displayArea), BorderLayout.SOUTH);
try
{
// make connection
socket = new Socket(getCodeBase().getHost(), 5423);
// get streams
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());
while(true)
{
output.writeUTF("hello from client"); //send message to server
output.flush();
processMessage(input.readUTF()); //process data from server
}
}
// catch problems setting up connection and streams
catch (IOException ioException) {
ioException.printStackTrace();
}
try
{
input.close();
output.close();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// process message received by client
private void processMessage(String message)
{
if (message.equals("hello"))
{
displayMessage("Connected to server");
}
}
private void displayMessage(final String messageToDisplay)
{
SwingUtilities.invokeLater(
new Runnable() {
public void run()
{
displayArea.append(messageToDisplay);
displayArea.setCaretPosition(displayArea.getText().length());
}
}
);
}
}
服務器:
import java.awt.*;
import java.net.*;
import java.io.*;
import javax.swing.*;
public class Server extends JFrame{
/**
*
*/
private static final long serialVersionUID = 1L;
private ServerSocket serverSocket;
private JTextArea outputArea;
private Socket socket = null;
private DataInputStream input;
private DataOutputStream output;
public Server()
{
super("Server");
try
{
serverSocket = new ServerSocket(5423, 1);
}
catch(IOException ioException)
{
ioException.printStackTrace();
System.exit(1);
}
outputArea = new JTextArea();
getContentPane().add(outputArea, BorderLayout.CENTER);
outputArea.setText("Server awaiting connections\n");
setSize(300, 300);
setVisible(true);
}
private void doThis() throws IOException
{
try
{
while(true)
{
socket = serverSocket.accept();
input = new DataInputStream(socket.getInputStream());
output = new DataOutputStream(socket.getOutputStream());
output.writeUTF("hello");
outputArea.append(input.readUTF()); //receive data from client
output.flush();
}
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
output.close();
input.close();
socket.close(); //close connection to client
}
}
public static void main(String[] args) throws IOException
{
Server server = new Server();
server.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
server.doThis();
}
}
異常讀取:
java.net.SocketException異常:在在 java.net.SocketInputStream.read(未知來源) java.net.SocketInputStream.read(未知來源)在 連接重置java.net .SocketInputStream.read(Unknown Source)at java.io.DataInputStream.readUnsignedShort(Unknown Source)at java.io.DataInputStream.readUTF(Unknown Source)at java.io.DataInputStream.readUTF(Unknown Source)at Client .init(Client.java:45)at sun.applet.AppletPanel.run(Unknown Source)at java.lang.Thread.run(Unknown Source)
什麼是例外? –
嗨,我編輯了主帖,包括例外 – Conor
看看你的代碼在第41行。那裏會發生什麼? –