首页上一页 1 下一页尾页 1 条记录 1/1页
关于TCP网络程序的问题寻求解决方法
发表在JavaWeb图书答疑
2009-10-22
是否精华
是
否
版块置顶:
是
否
关于TCP网络程序的问题
《从入门到精通》P328页光盘TM\sl\19\2,我在一部电脑上运行服务器端程序:
import java.io.*; //导入java.io包
import java.net.*; //导入java.net包
public class MyTcp { //创建类MyTcp
private BufferedReader reader; //创建BufferedReader对象
private ServerSocket server; //创建ServerSocket对象
private Socket socket; //创建Socket对象socket
void getserver() {
try {
server = new ServerSocket(2007); //实例化Socket对象
System.out.println("服务器套接字已经创建成功"); //输出信息
while (true) { //如果套接字是连接状态
System.out.println("等待客户机的连接"); //输出信息
socket = server.accept(); //实例化Socket对象
reader = new BufferedReader(new InputStreamReader(socket
.getInputStream())); //实例化BufferedReader对象
getClientMessage(); //调用getClientMessage()方法
}
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
}
private void getClientMessage() {
try {
while (true) { //如果套接字是连接状态
System.out.println("客户机:" + reader.readLine()); //获得客户端信息
}
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
try {
if (reader != null) {
reader.close(); //关闭流
}
if (socket != null) {
socket.close(); //关闭套接字
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) { //主方法
MyTcp tcp = new MyTcp(); //创建本类对象
tcp.getserver(); //调用方法
}
}
正常输出:服务器套接字已经创建成功
等待客户机的连接。
当在另一台电脑上运行客户端程序:P330页TM,sl。19,3
mport java.awt.*; //导入java.awt包
import java.awt.event.*; //导入java.awt.event包
import java.io.*; //导入java.io包
import java.net.*; //导入java.net包
import javax.swing.*; //导入java.swing包
public final class MyClien extends JFrame { //创建类继承JFrame类
private PrintWriter writer; //声明PrintWriter类对象
Socket socket; //声明Socket对象
private JTextArea ta = new JTextArea(); //创建JtextArea对象
private JTextField tf = new JTextField(); //创建JtextField对象
Container cc; //声明Container对象
public MyClien(String title) { //构造方法
super(title); //调用父类的构造方法
cc = this.getContentPane(); //实例化对象
cc.add(ta, "North"); //将文本域放在窗体的上部
cc.add(tf, "South"); //将文本框放在窗体的下部
tf.addActionListener(new ActionListener() { //绑定事件
public void actionPerformed(ActionEvent e) {
writer.println(tf.getText()); //将文本框中信息写入流
ta.append(tf.getText()); //将文本框中信息显示在文本域中
tf.setText(" "); //将文本框清空
}
});
}
private void connect() { //连接套接字方法
ta.append("尝试连接"); //文本域中信息信息
try { //捕捉异常
socket = new Socket("192.168.1.101",2007); //实例化Socket对象
writer = new PrintWriter(socket.getOutputStream(), true);
ta.append("完成连接"); //文本域中提示信息
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
}
public static void main(String[] args) { //主方法
MyClien clien = new MyClien("向服务器送数据"); //创建本例对象
clien.setSize(200, 200); //设置窗体大小
clien.setVisible(true); //将窗体显示
clien.connect(); //调用连接方法
}
}
此行:public final class MyClien extends JFrame 亮起黄灯,提示:serializable类MyClien未声明类型为 long的静态终态serialVersionUID字段
请详细解释,程序运行正常的话在服务器端有:System.out.println("客户机:"+reader.readline());信息输出?我是用路由器上网,两机的IP都查了。端口号由原8998改为2007。
拜托了!
《从入门到精通》P328页光盘TM\sl\19\2,我在一部电脑上运行服务器端程序:
import java.io.*; //导入java.io包
import java.net.*; //导入java.net包
public class MyTcp { //创建类MyTcp
private BufferedReader reader; //创建BufferedReader对象
private ServerSocket server; //创建ServerSocket对象
private Socket socket; //创建Socket对象socket
void getserver() {
try {
server = new ServerSocket(2007); //实例化Socket对象
System.out.println("服务器套接字已经创建成功"); //输出信息
while (true) { //如果套接字是连接状态
System.out.println("等待客户机的连接"); //输出信息
socket = server.accept(); //实例化Socket对象
reader = new BufferedReader(new InputStreamReader(socket
.getInputStream())); //实例化BufferedReader对象
getClientMessage(); //调用getClientMessage()方法
}
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
}
private void getClientMessage() {
try {
while (true) { //如果套接字是连接状态
System.out.println("客户机:" + reader.readLine()); //获得客户端信息
}
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
try {
if (reader != null) {
reader.close(); //关闭流
}
if (socket != null) {
socket.close(); //关闭套接字
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) { //主方法
MyTcp tcp = new MyTcp(); //创建本类对象
tcp.getserver(); //调用方法
}
}
正常输出:服务器套接字已经创建成功
等待客户机的连接。
当在另一台电脑上运行客户端程序:P330页TM,sl。19,3
mport java.awt.*; //导入java.awt包
import java.awt.event.*; //导入java.awt.event包
import java.io.*; //导入java.io包
import java.net.*; //导入java.net包
import javax.swing.*; //导入java.swing包
public final class MyClien extends JFrame { //创建类继承JFrame类
private PrintWriter writer; //声明PrintWriter类对象
Socket socket; //声明Socket对象
private JTextArea ta = new JTextArea(); //创建JtextArea对象
private JTextField tf = new JTextField(); //创建JtextField对象
Container cc; //声明Container对象
public MyClien(String title) { //构造方法
super(title); //调用父类的构造方法
cc = this.getContentPane(); //实例化对象
cc.add(ta, "North"); //将文本域放在窗体的上部
cc.add(tf, "South"); //将文本框放在窗体的下部
tf.addActionListener(new ActionListener() { //绑定事件
public void actionPerformed(ActionEvent e) {
writer.println(tf.getText()); //将文本框中信息写入流
ta.append(tf.getText()); //将文本框中信息显示在文本域中
tf.setText(" "); //将文本框清空
}
});
}
private void connect() { //连接套接字方法
ta.append("尝试连接"); //文本域中信息信息
try { //捕捉异常
socket = new Socket("192.168.1.101",2007); //实例化Socket对象
writer = new PrintWriter(socket.getOutputStream(), true);
ta.append("完成连接"); //文本域中提示信息
} catch (Exception e) {
e.printStackTrace(); //输出异常信息
}
}
public static void main(String[] args) { //主方法
MyClien clien = new MyClien("向服务器送数据"); //创建本例对象
clien.setSize(200, 200); //设置窗体大小
clien.setVisible(true); //将窗体显示
clien.connect(); //调用连接方法
}
}
此行:public final class MyClien extends JFrame 亮起黄灯,提示:serializable类MyClien未声明类型为 long的静态终态serialVersionUID字段
请详细解释,程序运行正常的话在服务器端有:System.out.println("客户机:"+reader.readline());信息输出?我是用路由器上网,两机的IP都查了。端口号由原8998改为2007。
拜托了!