服务端程序是这样的:
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class serverTwo extends JFrame implements ActionListener , Runnable {
//声明数据通信类对象和窗体组件对象
InetAddress addr ;
ServerSocket se ;
Socket so;
DataInputStream in ;
DataOutputStream out;
JButton btn;
JTextField jtf;
JTextArea jta;
JScrollPane jsp;
serverTwo() throws Exception {
//构建可视化窗体
btn = new JButton("发送");
jtf = new JTextField(15);
btn.addActionListener(this);
this.setLayout(new BorderLayout());
jta = new JTextArea();
JPanel jp = new JPanel();
jp.add(btn);
jp.add(jtf);
//创建滚动条面板
jsp = new JScrollPane();
jsp.setViewportView(jta);
this.setTitle("Server");
this.add(BorderLayout.SOUTH,jp);
this.add(jsp);
this.setSize(300,200);
this.setVisible(true);
//创建ServerSocket,并开始监听
addr= InetAddress.getByName("aci");
se= new ServerSocket(135);
System.out.println("服务器启动...");
so=se.accept();
System.out.println("有客户端连接...");
//创建数据流
in = new DataInputStream(so.getInputStream());
out =new DataOutputStream(so.getOutputStream());
}
public void run() {
//接收客户端的消息
try {
while (true) {
jta.append("client:" + in.readUTF());
jta.append("\n");
}
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) throws Exception {
//将当前类作为线程启动
Thread t = new Thread(new serverTwo());
t.start();
}
public void actionPerformed(ActionEvent e) {
try {
//向客户端发送消息
out.writeUTF(jtf.getText());
out.flush();
//发送一次消息,在当前窗体也显示自身的消息
jta.append("me:" + jtf.getText());
jta.append("\n");
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}客户端是这样的:import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class clientTwo extends JFrame implements ActionListener , Runnable {
Socket so ;
DataInputStream in ;
DataOutputStream out;
JButton btn;
JTextField jtf;
JTextArea jta;
JScrollPane jsp;
clientTwo() throws Exception {
btn = new JButton("发送");
jtf = new JTextField(15);
btn.addActionListener(this);
this.setLayout(new BorderLayout());
jta = new JTextArea();
JPanel jp = new JPanel();
jp.add(btn);
jp.add(jtf);
jsp = new JScrollPane();
jsp.setViewportView(jta);
this.setTitle("Client");
this.add(BorderLayout.SOUTH,jp);
this.add(jsp);
this.setSize(300,200);
this.setVisible(true);
//创建客户端Socket并创建输入输出流
so= new Socket("localhost",135);
in = new DataInputStream(so.getInputStream());
out= new DataOutputStream(so.getOutputStream());
}
public void run() {
//接收服务器返回的消息
try {
while (true) {
jta.append("server:" + in.readUTF());
jta.append("\n");
}
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) throws Exception {
Thread t = new Thread(new clientTwo());
t.start();
}
public void actionPerformed(ActionEvent e) {
try {
//向服务器发送消息
out.writeUTF(jtf.getText());
out.flush();
jta.append("me:" + jtf.getText());
jta.append("\n");
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}
运行时,客户端可以,服务端运行时,不能在jta中显示jtf中输入的信息,控制台只是输出一个null
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
public class serverTwo extends JFrame implements ActionListener , Runnable {
//声明数据通信类对象和窗体组件对象
InetAddress addr ;
ServerSocket se ;
Socket so;
DataInputStream in ;
DataOutputStream out;
JButton btn;
JTextField jtf;
JTextArea jta;
JScrollPane jsp;
serverTwo() throws Exception {
//构建可视化窗体
btn = new JButton("发送");
jtf = new JTextField(15);
btn.addActionListener(this);
this.setLayout(new BorderLayout());
jta = new JTextArea();
JPanel jp = new JPanel();
jp.add(btn);
jp.add(jtf);
//创建滚动条面板
jsp = new JScrollPane();
jsp.setViewportView(jta);
this.setTitle("Server");
this.add(BorderLayout.SOUTH,jp);
this.add(jsp);
this.setSize(300,200);
this.setVisible(true);
//创建ServerSocket,并开始监听
addr= InetAddress.getByName("aci");
se= new ServerSocket(135);
System.out.println("服务器启动...");
so=se.accept();
System.out.println("有客户端连接...");
//创建数据流
in = new DataInputStream(so.getInputStream());
out =new DataOutputStream(so.getOutputStream());
}
public void run() {
//接收客户端的消息
try {
while (true) {
jta.append("client:" + in.readUTF());
jta.append("\n");
}
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) throws Exception {
//将当前类作为线程启动
Thread t = new Thread(new serverTwo());
t.start();
}
public void actionPerformed(ActionEvent e) {
try {
//向客户端发送消息
out.writeUTF(jtf.getText());
out.flush();
//发送一次消息,在当前窗体也显示自身的消息
jta.append("me:" + jtf.getText());
jta.append("\n");
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}客户端是这样的:import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class clientTwo extends JFrame implements ActionListener , Runnable {
Socket so ;
DataInputStream in ;
DataOutputStream out;
JButton btn;
JTextField jtf;
JTextArea jta;
JScrollPane jsp;
clientTwo() throws Exception {
btn = new JButton("发送");
jtf = new JTextField(15);
btn.addActionListener(this);
this.setLayout(new BorderLayout());
jta = new JTextArea();
JPanel jp = new JPanel();
jp.add(btn);
jp.add(jtf);
jsp = new JScrollPane();
jsp.setViewportView(jta);
this.setTitle("Client");
this.add(BorderLayout.SOUTH,jp);
this.add(jsp);
this.setSize(300,200);
this.setVisible(true);
//创建客户端Socket并创建输入输出流
so= new Socket("localhost",135);
in = new DataInputStream(so.getInputStream());
out= new DataOutputStream(so.getOutputStream());
}
public void run() {
//接收服务器返回的消息
try {
while (true) {
jta.append("server:" + in.readUTF());
jta.append("\n");
}
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) throws Exception {
Thread t = new Thread(new clientTwo());
t.start();
}
public void actionPerformed(ActionEvent e) {
try {
//向服务器发送消息
out.writeUTF(jtf.getText());
out.flush();
jta.append("me:" + jtf.getText());
jta.append("\n");
}
catch(Exception ex) {
System.out.println(ex.getMessage());
}
}
}
运行时,客户端可以,服务端运行时,不能在jta中显示jtf中输入的信息,控制台只是输出一个null
1)("aci");这个aci主机名称是否正确?是否真实存在?你用cmd的ping aci能否ping通?如果不能通,先把这个问题解决了。如果是本机测试,直接写localhost2)看到你给服务器绑定到的端口是135.要知道,在os世界,<1024的端口号大部分是分配给os用的。你搞这么特殊的端口,很容易绑定失败(socket创建失败)。建议改一个不超过65535的很随意的,比如12345都没问题如果这两个都搞定了,估计没大问题了