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();
}
}
}
}