黑马程序员-TCP完善

如何检测和解决端口冲突问题

 

使用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;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值