如何检测和解决端口冲突问题
使用DOS命令:netstat命令查看当前正在被使用的TCP端口号。
TCP使用的端口号最好用一个配置参数来指定。当发生冲突时,可以用配置参数来调整端口号。
if (args.length<1)
{
ss=new ServerSocket(8001);
}
else
{
ss=new ServerSocket(Integer.parseInt(args[0]));
//用户可以通过运行参数自行设置端口
}
将用户所指定的端口号保存在一个文件中,当服务器下次启动时,直接从文件中读取那个端口号。
这样,用户需要调整服务器程序端口号时,只需要使用一次,以后就能都同样的使用调整后的端口。
TCP客户端程序的编写
import java.net.*;
import java.io.*;
public class TcpClient {
/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) throws Exception {
// TODO: 在这添加你的代码
if (args.length<2)
{
System.out.println("Usage:java TcpClient ServerIP ServerPort");
return;
}
Socket s=new Socket(args[0],Integer.parseInt(args[1]));
InputStream ips=s.getInputStream();
OutputStream ops=s.getOutputStream();
BufferedReader brNet=new BufferedReader(
new InputStreamReader(ips));
PrintWriter pw=new PrintWriter(ops,true);
BufferedReader brKeyBoard=new BufferedReader(
new InputStreamReader(System.in));
while(true)
{
String strWord=brKeyBoard.readLine();
pw.println(strWord);
if(strWord.equalsIgnoreCase("quit"))
{
break;
}
System.out.println(brNet.readLine());
}
pw.close();
brNet.close();
brKeyBoard.close();
===================================
在TCP网络连接上传递对象
使用到ObjectInputStream 和ObjectOutputStream可以从底层输入 流中读取对象类型的数据以及写入到底层输出流
使用ObjectInputStream 和ObjectOutputStream来包装底层网络字节流,TCP服务器和TCP客户端之间就可以传递对家雀儿类型的数据。
import java.net.*;
import java.io.*;
public class ObjectServer {
/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) throws Exception {
// TODO: 在这添加你的代码
ServerSocket ss=new ServerSocket(8001);
Socket s=ss.accept();
OutputStream ops=s.getOutputStream();
ObjectOutputStream oos=new ObjectOutputStream(ops);
Student stu=new Student(19,"wang",22,"huaxue");
oos.writeObject(stu);
oos.close();
s.close();
ss.close();
}
}
================================
import java.net.*;
import java.io.*;
public class ObjectClient {
/**
* Method main
*
*
* @param args
*
*/
public static void main(String[] args) throws Exception {
// TODO: 在这添加你的代码
Socket s=new Socket("127.0.0.1",8001);
InputStream ips=s.getInputStream();
ObjectInputStream ois=new ObjectInputStream(ips);
Student stu=(Student)ois.readObject();
System.out.println("id is "+stu.id);
System.out.println("age is "+stu.age);
System.out.println("name is "+stu.name);
System.out.println("department is "+stu.department);
ois.close();
s.close();
}
}
=============================
import java.io.Serializable;
public class Student implements Serializable {
int id;
String name;
int age;
String department;
public Student(int id,String name,int age,String department)
{
this.id=id;
this.name=name;
this.age=age;
this.department=department;
}
}