TCP URL

本文详细介绍了TCP通信的基本原理,包括ClientSocket与ServerSocket的工作方式、连接建立过程及端口配置等。此外,还提供了完整的Java代码示例,演示如何实现简单的TCP服务器与客户端交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ClientSocket之间不能直接连接

ClientSocket向ServerSocket发出请求
ServerSocket收到请求时 建立Socket 与 请求的ClientSocket连接

ServerSocket 创建时可以指定端口号,也可以指定0 随机分配

ServerSocket(int port|,int backlog |,InetAddress bindAddr)
_____________端口号___连接数(默认50)__地址(适用于多网卡)

Socket("xxx.xxx.x.x",3306),

Socket中有输入输出流 InputStream,OutputStream

通过对象序列化使用ObjectOutputStream来传递对象

TCP保证传输但是不保证对方是否可以解读。

 

 

URL统一资源定位符 Uniform Resource Locator

 

HTTP消息头
Connection 本次后是否关闭
Accept-Language 语言
Content-length 内容长度
Range 内容范围
Content-Range 返回指定的部分内容

 

URL类  URLStreamHandler协议处理类
URL不能直接获取文件

工厂模式:隐藏子类 ,通过向工厂类传递的参数 获得子类对象。

 

 

TCP测试:
import java.io.*;
import java.net.*;

public class TCPServer {
 public static void main(String[] args) {
  ServerSocket ss=null;
  Socket s = null;
  //OutputStream out=null;
  //InputStream in=null;
  //BufferedReader br = null;
  //InputStreamReader isr = null;
  boolean goon = true;
  
   try {
    ss = new ServerSocket(9527);
    
   } catch (IOException e) {
    System.out.println("端口使用中...");
    e.printStackTrace();
   }
  
  while(goon){
   try {
    s = ss.accept();
    new Thread(new ServerRun(s)).start();
    
   } catch (IOException e) {
    System.out.println("建立与客户端连接失败...");
    e.printStackTrace();
   }
   finally {
    try{
     //br.close();
     //out.close();    
     //s.close();
     
    } catch (Exception e){
     e.printStackTrace();
    }
   }
  }
  /*
  try {
   in = s.getInputStream();
   out = s.getOutputStream();
   isr = new InputStreamReader(in);
   br = new BufferedReader(isr);
   out.write("Welcome!".getBytes());  
   //byte[] b = new byte[1024];
   //int len;
   String str="";
   while(true){
    str = "";
    str = br.readLine();
    if(str == "stop"){
     System.out.println(str);
    }
   }
   
  } catch (IOException e) {
   System.out.print("数据读写错误...");
   e.printStackTrace();
  }*/
  
 }
 
 
}

class ServerRun implements Runnable{
 Socket s = null;
 OutputStream out=null;
 InputStream in=null;
 BufferedReader br = null;
 InputStreamReader isr = null;
 
 PrintWriter pw =null;
 
 public ServerRun(Socket s){
  this.s= s;
 }
 @Override
 public void run() {
  try {
   in = s.getInputStream();
   out = s.getOutputStream();
   isr = new InputStreamReader(in);
   br = new BufferedReader(isr);
    out.write("Welcome!".getBytes());
   out.flush();
   pw = new PrintWriter(out);
   
   //byte[] b = new byte[1024];
   //int len;
   String str="";
   String rstr = "";
   while(true){
    str = "";
    rstr ="";
    str = br.readLine();
    System.out.println(str);
    rstr = (new StringBuffer(str).reverse()).toString();
    if(str.equalsIgnoreCase("stop")){
     System.out.print("收到STOP,系统退出");
     System.exit(0);
    }
    else{
     System.out.println(rstr);
     pw.println(rstr);
     pw.close();
     br.close();
     s.close();
    }
   }
   
  } catch (IOException e) {
   System.out.print("数据读写错误...");
   e.printStackTrace();
  }finally {
   try{
    br.close();
    out.close();    
    s.close();    
   } catch (Exception e){
    e.printStackTrace();
   }
  }  
 } 
}

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.*;


public class TCPClient {

 /**
  * @param args
  */
 public static void main(String[] args) {
  Socket s = null;
  InputStream in=null;
  OutputStream out=null;
  InputStreamReader isr = null;
  getMassage gm=null;
 
  try {
    s = new Socket("127.0.0.1",9527);
  } catch (UnknownHostException e) {
   System.out.println("未知的地址...");
   e.printStackTrace();
  } catch (IOException e) {
   System.out.println("连接失败...");
   e.printStackTrace();
  }
  try {
   in = s.getInputStream();
   out = s.getOutputStream();
   gm = new getMassage(s);
   new Thread(gm).start();
   System.out.println("连接成功了!");
   String str = "";
   BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   while(true){
     str = "";
     str = br.readLine();
     System.out.println(str+"恩 ,成功了,没有问题");
     out.write(str.getBytes());
     out.flush();
    }
   } catch (IOException e) {
    //System.out.print("stop");
    e.printStackTrace();
    //System.exit(-1);
   }  
 } 
}
class getMassage implements Runnable{
 Socket s = null;
 public getMassage(Socket s) {
  this.s = s;
 }
 InputStream in = null;
 public getMassage(InputStream in) {
  this.in = in;
 }
 public void run() {
  try {
   in = s.getInputStream();
  } catch (IOException e1) {
   System.out.println("没有拿到输入");
   e1.printStackTrace();
  }
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String str="";
  while(true){
   str = "";
   try {
    str = br.readLine();
    System.out.println(str);
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  }
  
 }
   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值