【发布时间】:2015-09-26 02:17:20
【问题描述】:
我尝试运行代码以使用 java swing 库创建 GUI 以向本地主机服务器发送消息。GUI 包含一个用于键入消息的文本字段和一个用于将其发送到服务器的按钮。包含服务器代码在另一个班级。
当我尝试运行代码时,控制台中的套接字异常显示为:
java.net.SocketException: Permission denied: connect at java.net.DualStackPlainSocketImpl.connect0(本机方法)在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
请帮我连接到服务器。
我在这里附上了 GUI 和服务器的代码。
用于创建 GUI 和建立与服务器的连接的类:
package org.myorg;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.*;
import java.*io.IOException;
import java.io.PrintWriter;
import java.net.*;
import org.myorg.MessageServer;
public class SendMessage {
PrintWriter writer;
Socket sock;
JTextField text;
/*Creates GUI and adds SendButtonListener object to the button.
Calls setUpNetworking() method*/
public void go(){
JFrame frame=new JFrame();
JPanel panel=new JPanel();
text=new JTextField("Message",15);
JButton button=new JButton("Send");
button.setSize(5,5);
button.addActionListener(new SendButtonListener());
panel.add(text);
panel.add(button);
frame.getContentPane().add(BorderLayout.CENTER,panel);
frame.setSize(300,200);
frame.setVisible(true);
setUpNetworking();
}
/*Listens to action event of clicking the 'send' button.
The message from the text field is written to writer object for sending it
to server*/
class SendButtonListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
try{
writer.println(text.getText());
writer.flush();
}catch(Exception ex){
ex.printStackTrace();
}
text.setText("message");
text.requestFocusInWindow();
}
}
/*Establishes socket connection to the server. Object of PrintWriter is
created*/
private void setUpNetworking(){
try {
sock=new Socket("127.0.0.1",50000);
writer=new PrintWriter(sock.getOutputStream());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*Main method*/
public static void main(String[] args) {
SendMessage sendMessage=new SendMessage();
MessageServer server=new MessageServer();
sendMessage.go();
server.go();
}
}
服务器类
package org.myorg;
import java.io.*;
import java.net.*;
public class MessageServer {
Socket sock;
/*Accepts the socket connection and calls the read() method*/
public void go(){
try{
@SuppressWarnings("resource")
ServerSocket socket=new ServerSocket(50000);
sock=socket.accept();
read(sock);
}catch(IOException e){
e.printStackTrace();
}
}
/*Reads the message using InputStreamReader*/
public void read(Socket sock){
InputStreamReader stream;
try {
stream = new InputStreamReader(sock.getInputStream());
BufferedReader reader=new BufferedReader(stream);
System.out.println(reader.readLine());
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
【问题讨论】:
-
API 说“底层协议有错误,比如 TCP 错误”。您可能需要打开端口。这个complete example 可以帮助您缩小搜索范围。
-
可能duplicate.
-
请确保发布的代码具有合理且一致的代码块缩进方式。 IDE 通常有一个格式化代码的快捷方式。