package net.tcp;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;public class TCP_Client {public static void main(String[] args) throws UnknownHostException, IOException {/** TCP客户端*/System.out.println( "TCP客户端");InetAddress ip = InetAddress.getLocalHost();// 1. 建立TCP的客户端socket,明确服务端的地址和端口。Socket s = new Socket( ip, 10003);// 2. 如果通道建立成功,则自动生成Socket IO流。// 客户端需要获取socket流的中输出流将数据发送到服务端OutputStream out = s.getOutputStream();// 3. 通过socket输出流将数据发送。out.write("hello tcp".getBytes());// 4. 关闭资源。s.close();}}
package net.tcp;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class TCP_Server {public static void main(String[] args) throws IOException {/** TCP服务器端*/System.out.println( "TCP服务器端" );// 1. 创建服务端的socket,监听一个端口。ServerSocket ss = new ServerSocket(10003);while ( true) {// 2. 服务端只要获取到连接过来的客户端套接字就可以和指定的客户端通信了Socket s = ss.accept(); // 阻塞,监听链接String ip = s.getRemoteSocketAddress().toString();System.out.println( ip + " is connected!");// 3. 通过获取的套接字,读取IO流中客户端发来的数据InputStream in = s.getInputStream();// 4. 获取数据并显示byte[] buf = new byte[1024];int len = in.read(buf);String text = new String( buf, 0, len);if ("close".equals( text)) {s.close();break;}System.out.println( text);// 5. 关闭资源。s.close();}ss.close();}}
package net.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.net.UnknownHostException;public class WebBrowserByURL {/*** @param args* @throws IOException* @throws UnknownHostException*/public static void main(String[] args) throws UnknownHostException, IOException {/** 模拟一个浏览器*/URL url = new URL("https://www.google.com.hk:443/search?hl=zh-CN&q=URL" );System.out.println( "getProtocol: " + url.getProtocol());System.out.println( "getHost: " + url .getHost());System.out.println( "getPort: " + url .getPort());System.out.println( "getPath: " + url .getPath());System.out.println( "getFile: " + url .getFile());System.out.println( "getQuery: " + url .getQuery());// 获取指定资源连接对象,其中封装了SocketURLConnection uc = url.openConnection();BufferedReader br = new BufferedReader( new InputStreamReader(uc.getInputStream(), "utf-8" ));String str = null;while (( str = br.readLine()) != null) {System.out.println( str);}}}
package net.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.InetAddress;import java.net.Socket;public class Test_UpperCaseByTCP_Client {public static void main(String[] args) throws IOException {System.out.println( "客户端启动..." );// 确定服务器地址InetAddress ip = InetAddress.getLocalHost();// 2. 创建套接字Socket s = new Socket( ip, 10001);/** 3. 发送:* 源:键盘录入* 目的:Socket流,类型:OutputStream*/BufferedReader brSend = new BufferedReader( new InputStreamReader(System.in ));// BufferedWriter bwSend = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));// 输出流可使用PrintStream,可以自动添加换行和自动刷新,更加方便PrintStream psSend = new PrintStream(s.getOutputStream(), true);/** 4. 接收: 源:Socket流 目的:屏幕显示*/BufferedReader brRece = new BufferedReader( new InputStreamReader(s.getInputStream()));// 5. 发送,并显示响应数据String str = null;while (( str = brSend.readLine()) != null) {// bwSend.write(str);// bwSend.newLine();// bwSend.flush();psSend.println( str);if ("exit".equals( str) || "close".equals(str )) {break;}str = brRece.readLine();System.out.println( str);}// 6. 关闭资源s.close();}}
package net.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class Test_UpperCaseByTCP_Server {public static void main(String[] args) throws IOException {System.out.println( "服务端启动..." );// 1. 创建套接字ServerSocket ss = new ServerSocket(10001);while ( true) {// 2. 获取客户端套接字Socket s = ss.accept();System.out.println(s .getInetAddress().getHostAddress() + "已连接!" );// 3. 明确接收和发送的Socket流BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));// 输出流可使用PrintStream,可以自动添加换行和自动刷新,更加方便PrintStream ps = new PrintStream(s.getOutputStream(), true);// 4. 获取数据并做大写转换String str = null;while (( str = br.readLine()) != null) {if ( "exit".equals(str )) {break;} else if ( "close".equals(str )) {System.out.println(s .getInetAddress().getHostAddress() + ":" + s .getPort()+ " 请求关闭服务端..." );s.close();ss.close();System. out.println("服务端已关闭!" );return;}System. out.println("数据:" + str );// 5. 将转换好的数据发送回客户端// bw.write(str.toUpperCase());// bw.newLine();// bw.flush();ps.println( str.toUpperCase());}// 6. 关闭客户端s.close();}}}
package net.tcp;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;public class Test_UploadByTCP_Client {private static final int BUFFER_SIZE = 8192;public static void main(String[] args) throws IOException {System.out.println( "上传客户端启动..." );// 1. 获取服务器地址和端口InetAddress ip = InetAddress.getLocalHost();// 2. 创建套接字连接服务器Socket s = new Socket( ip, 10002);/** 3. 发送:* 源:文件* 目的:Socket流,类型:OutputStream*/File file = new File( "temp\\byte.ape");FileInputStream fis = new FileInputStream( file);OutputStream os = s.getOutputStream();// 4. 循环发送byte[] buf = new byte[ BUFFER_SIZE];int len = 0;while (( len = fis.read( buf)) != -1) {os.write(buf, 0, len);}fis.close();// 5. 发送结束标志s.shutdownOutput();// 6. 读取服务器反馈信息BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));System.out.println( br.readLine());// 7. 关闭资源s.close();}}
package net.tcp;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.text.SimpleDateFormat;import java.util.Date;public class Test_UploadByTCP implements Runnable {private static final int BUFFER_SIZE = 8192;private Socket s;public Test_UploadByTCP(Socket s) {super();this.s = s;}@Overridepublic void run() {/** 1. 接收: 源:Socket流* 目的:文件*/File path = new File( "temp\\" + s.getInetAddress().getHostAddress());if (!path.exists()) {path.mkdirs();}// 对上传文件按上传时间命名,并避免与已有文件名重复Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd-HHmmss-" );String preName = sdf.format(date);int count = 0;File file = new File( path, preName + count + ".ape");while ( file.exists()) {count++;file = new File( path, preName + count + ".ape");}try {InputStream is = s.getInputStream();FileOutputStream fos = new FileOutputStream( file);// 2. 循环接收byte[] buf = new byte[ BUFFER_SIZE];int len = 0;while (( len = is.read( buf)) != -1) {fos.write( buf, 0, len);}fos.close();String msg = "上传成功!";// 4. 发送反馈信息OutputStream os = s.getOutputStream();os.write(msg.getBytes());// 5. 关闭资源s.close();} catch (IOException e) {e.printStackTrace();}}}
package net.tcp;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Test_UploadByTCP_Server {public static void main(String[] args) throws IOException {System.out.println( "上传服务端启动..." );// 1. 创建套接字ServerSocket ss = new ServerSocket(10002);while ( true) {// 2. 获取客户端套接字Socket s = ss.accept();// 3. 创建线程完成文件上传new Thread( new Test_UploadByTCP( s)).start();}}}
package net.tcp;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;public class WebBrowser {/*** @param args* @throws IOException* @throws UnknownHostException*/public static void main(String[] args) throws UnknownHostException, IOException {/** 模拟一个浏览器*/InetAddress ip = InetAddress.getByName("www.itheima.com");System.out.println( ip.getHostAddress());Socket s = new Socket( ip, 80);// 浏览器请求信息发送给服务端PrintWriter out = new PrintWriter(s.getOutputStream(), true);out.println("GET / HTTP/1.1");out.println("Accept: */*");out.println("Host: www.itheima.com:80");out.println("Connection: close");out.println(); // 空行。// 读取服务端的数据。InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String( buf, 0, len, "utf-8");System.out.println( text);s.close();}}
package net.tcp;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class WebServer {public static void main(String[] args) throws IOException {/** 自定义Web服务端 获取浏览器的信息,并反馈 Html信息。*/System.out.println( "自定义Web服务器启动..." );ServerSocket ss = new ServerSocket(9090);Socket s = ss.accept();System.out.println(s .getInetAddress().getHostAddress() + " is connected.");// 读取客户端的数据。InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String( buf, 0, len);System.out.println( text);// 给客户端回馈数据。PrintWriter out = new PrintWriter(s.getOutputStream(), true);out.println("<font color=‘red‘ size=‘7‘>欢迎光临</font>" );s.close();ss.close();}}
package net.tcp;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;public class TCP_Client {public static void main(String[] args) throws UnknownHostException, IOException {/** TCP客户端*/System.out.println( "TCP客户端");InetAddress ip = InetAddress.getLocalHost();// 1. 建立TCP的客户端socket,明确服务端的地址和端口。Socket s = new Socket( ip, 10003);// 2. 如果通道建立成功,则自动生成Socket IO流。// 客户端需要获取socket流的中输出流将数据发送到服务端OutputStream out = s.getOutputStream();// 3. 通过socket输出流将数据发送。out.write("hello tcp".getBytes());// 4. 关闭资源。s.close();}}
package net.tcp;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;public class TCP_Server {public static void main(String[] args) throws IOException {/** TCP服务器端*/System.out.println( "TCP服务器端" );// 1. 创建服务端的socket,监听一个端口。ServerSocket ss = new ServerSocket(10003);while ( true) {// 2. 服务端只要获取到连接过来的客户端套接字就可以和指定的客户端通信了Socket s = ss.accept(); // 阻塞,监听链接String ip = s.getRemoteSocketAddress().toString();System.out.println( ip + " is connected!");// 3. 通过获取的套接字,读取IO流中客户端发来的数据InputStream in = s.getInputStream();// 4. 获取数据并显示byte[] buf = new byte[1024];int len = in.read(buf);String text = new String( buf, 0, len);if ("close".equals( text)) {s.close();break;}System.out.println( text);// 5. 关闭资源。s.close();}ss.close();}}
package net.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.net.URL;import java.net.URLConnection;import java.net.UnknownHostException;public class WebBrowserByURL {/*** @param args* @throws IOException* @throws UnknownHostException*/public static void main(String[] args) throws UnknownHostException, IOException {/** 模拟一个浏览器*/URL url = new URL("https://www.google.com.hk:443/search?hl=zh-CN&q=URL" );System.out.println( "getProtocol: " + url.getProtocol());System.out.println( "getHost: " + url .getHost());System.out.println( "getPort: " + url .getPort());System.out.println( "getPath: " + url .getPath());System.out.println( "getFile: " + url .getFile());System.out.println( "getQuery: " + url .getQuery());// 获取指定资源连接对象,其中封装了SocketURLConnection uc = url.openConnection();BufferedReader br = new BufferedReader( new InputStreamReader(uc.getInputStream(), "utf-8" ));String str = null;while (( str = br.readLine()) != null) {System.out.println( str);}}}
package net.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.InetAddress;import java.net.Socket;public class Test_UpperCaseByTCP_Client {public static void main(String[] args) throws IOException {System.out.println( "客户端启动..." );// 确定服务器地址InetAddress ip = InetAddress.getLocalHost();// 2. 创建套接字Socket s = new Socket( ip, 10001);/** 3. 发送:* 源:键盘录入* 目的:Socket流,类型:OutputStream*/BufferedReader brSend = new BufferedReader( new InputStreamReader(System.in ));// BufferedWriter bwSend = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));// 输出流可使用PrintStream,可以自动添加换行和自动刷新,更加方便PrintStream psSend = new PrintStream(s.getOutputStream(), true);/** 4. 接收: 源:Socket流 目的:屏幕显示*/BufferedReader brRece = new BufferedReader( new InputStreamReader(s.getInputStream()));// 5. 发送,并显示响应数据String str = null;while (( str = brSend.readLine()) != null) {// bwSend.write(str);// bwSend.newLine();// bwSend.flush();psSend.println( str);if ("exit".equals( str) || "close".equals(str )) {break;}str = brRece.readLine();System.out.println( str);}// 6. 关闭资源s.close();}}
package net.tcp;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintStream;import java.net.ServerSocket;import java.net.Socket;public class Test_UpperCaseByTCP_Server {public static void main(String[] args) throws IOException {System.out.println( "服务端启动..." );// 1. 创建套接字ServerSocket ss = new ServerSocket(10001);while ( true) {// 2. 获取客户端套接字Socket s = ss.accept();System.out.println(s .getInetAddress().getHostAddress() + "已连接!" );// 3. 明确接收和发送的Socket流BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));// 输出流可使用PrintStream,可以自动添加换行和自动刷新,更加方便PrintStream ps = new PrintStream(s.getOutputStream(), true);// 4. 获取数据并做大写转换String str = null;while (( str = br.readLine()) != null) {if ( "exit".equals(str )) {break;} else if ( "close".equals(str )) {System.out.println(s .getInetAddress().getHostAddress() + ":" + s .getPort()+ " 请求关闭服务端..." );s.close();ss.close();System. out.println("服务端已关闭!" );return;}System. out.println("数据:" + str );// 5. 将转换好的数据发送回客户端// bw.write(str.toUpperCase());// bw.newLine();// bw.flush();ps.println( str.toUpperCase());}// 6. 关闭客户端s.close();}}}
package net.tcp;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;public class Test_UploadByTCP_Client {private static final int BUFFER_SIZE = 8192;public static void main(String[] args) throws IOException {System.out.println( "上传客户端启动..." );// 1. 获取服务器地址和端口InetAddress ip = InetAddress.getLocalHost();// 2. 创建套接字连接服务器Socket s = new Socket( ip, 10002);/** 3. 发送:* 源:文件* 目的:Socket流,类型:OutputStream*/File file = new File( "temp\\byte.ape");FileInputStream fis = new FileInputStream( file);OutputStream os = s.getOutputStream();// 4. 循环发送byte[] buf = new byte[ BUFFER_SIZE];int len = 0;while (( len = fis.read( buf)) != -1) {os.write(buf, 0, len);}fis.close();// 5. 发送结束标志s.shutdownOutput();// 6. 读取服务器反馈信息BufferedReader br = new BufferedReader( new InputStreamReader(s.getInputStream()));System.out.println( br.readLine());// 7. 关闭资源s.close();}}
package net.tcp;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.text.SimpleDateFormat;import java.util.Date;public class Test_UploadByTCP implements Runnable {private static final int BUFFER_SIZE = 8192;private Socket s;public Test_UploadByTCP(Socket s) {super();this.s = s;}@Overridepublic void run() {/** 1. 接收: 源:Socket流* 目的:文件*/File path = new File( "temp\\" + s.getInetAddress().getHostAddress());if (!path.exists()) {path.mkdirs();}// 对上传文件按上传时间命名,并避免与已有文件名重复Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd-HHmmss-" );String preName = sdf.format(date);int count = 0;File file = new File( path, preName + count + ".ape");while ( file.exists()) {count++;file = new File( path, preName + count + ".ape");}try {InputStream is = s.getInputStream();FileOutputStream fos = new FileOutputStream( file);// 2. 循环接收byte[] buf = new byte[ BUFFER_SIZE];int len = 0;while (( len = is.read( buf)) != -1) {fos.write( buf, 0, len);}fos.close();String msg = "上传成功!";// 4. 发送反馈信息OutputStream os = s.getOutputStream();os.write(msg.getBytes());// 5. 关闭资源s.close();} catch (IOException e) {e.printStackTrace();}}}
package net.tcp;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;public class Test_UploadByTCP_Server {public static void main(String[] args) throws IOException {System.out.println( "上传服务端启动..." );// 1. 创建套接字ServerSocket ss = new ServerSocket(10002);while ( true) {// 2. 获取客户端套接字Socket s = ss.accept();// 3. 创建线程完成文件上传new Thread( new Test_UploadByTCP( s)).start();}}}
package net.tcp;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;public class WebBrowser {/*** @param args* @throws IOException* @throws UnknownHostException*/public static void main(String[] args) throws UnknownHostException, IOException {/** 模拟一个浏览器*/InetAddress ip = InetAddress.getByName("www.itheima.com");System.out.println( ip.getHostAddress());Socket s = new Socket( ip, 80);// 浏览器请求信息发送给服务端PrintWriter out = new PrintWriter(s.getOutputStream(), true);out.println("GET / HTTP/1.1");out.println("Accept: */*");out.println("Host: www.itheima.com:80");out.println("Connection: close");out.println(); // 空行。// 读取服务端的数据。InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String( buf, 0, len, "utf-8");System.out.println( text);s.close();}}
package net.tcp;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class WebServer {public static void main(String[] args) throws IOException {/** 自定义Web服务端 获取浏览器的信息,并反馈 Html信息。*/System.out.println( "自定义Web服务器启动..." );ServerSocket ss = new ServerSocket(9090);Socket s = ss.accept();System.out.println(s .getInetAddress().getHostAddress() + " is connected.");// 读取客户端的数据。InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);String text = new String( buf, 0, len);System.out.println( text);// 给客户端回馈数据。PrintWriter out = new PrintWriter(s.getOutputStream(), true);out.println("<font color=‘red‘ size=‘7‘>欢迎光临</font>" );s.close();ss.close();}}
原文:http://blog.csdn.net/u010388781/article/details/51167762