3.19Java基础知识:Socket编程全部,TCPIP

Socket编程全部,TCP/IP

一、TCP/IP 通信通信,必须要有IP地址,必须要有相同的套接字(socket)
步骤:
1、寻址定位:
通过IP地址 找到主机
通过port (端口号)(0-65535) 找到程序
查看主机的端口号:cmd netstat -ano
SQL 端口号:3306
我们自己的:8080之后
本机IP 127.0.0.1


2、通信(协议)
TCP/IP包含:
TCP 可靠(三次握手)B是否能接收,B是否接收到,B返回信息给A
TUP 不可靠,无状态,速度快,视频一般用这种


二、套接字 socket
socket 应用程序访问TCP/IP 的调用

socket编程:
①、服务器端:
1、建立服务端某一个端口监听
ServerSocket server = new ServerSocket(8080);
2、准备解释客服端请求:等待-准备
Socket socket = server.accept();
3、创建输入流:
BufferedReader br = new Buff..(new InputS..R..(socket.getInputStream));
PrintWriter pw = new PrintWriter(Socket.getOutputStream(),true);
4、关闭流,关闭socket,关闭server
br.close();socket.close();pw.colse();

②、客服端:少了第一步ServerSocket
1、向服务器发请求
Socket socket = new Socket("127.0.0.1",8080);
2、创建输入输出流:
BufferedReader br = new Bu..R..(new InputS..R(socket.getInputStream))
3、关闭流,socket,server

没有一直监听的:

 1 package com.socket;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.Socket;
 7 import java.net.UnknownHostException;
 8 
 9 import javax.swing.JOptionPane;
10 
11 /**
12  * Date: 2016-3-19-上午11:18:18
13  * Class_name: Client.java
14  * Package_name: com.lovo.demo_18
15  * Author: ZhangYue
16  * Description: 
17  */
18 public class Client {
19     
20     
21     public Client(){
22         try {
23             
24             String input_info = JOptionPane.showInputDialog(null,"请输入请求信息");
25             
26             Socket socket = new Socket("127.0.0.1", 8090);
27             
28             //客户端向服务器发送请求
29             OutputStream out = socket.getOutputStream();
30             out.write(input_info.getBytes());
31             
32             //客户端接收服务器的响应
33             InputStream in = socket.getInputStream();
34             byte [] b = new byte[1024];
35             
36             System.out.println(b.length);
37             
38             in.read(b);
39             
40             System.out.println("客户端接收到服务器端的响应信息:" + new String(b).trim());
41             
42             out.close();
43             in.close();
44             socket.close();
45         } catch (UnknownHostException e) {
46             // TODO Auto-generated catch block
47             e.printStackTrace();
48         } catch (IOException e) {
49             // TODO Auto-generated catch block
50             e.printStackTrace();
51         }
52     }
53     
54     
55     public static void main(String[] args) {
56         new Client();
57     }
58 
59 }
Client
 1 package com.socket;
 2 
 3 import java.io.BufferedReader;
 4 import java.io.FileInputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.InputStreamReader;
 8 import java.io.OutputStream;
 9 import java.net.ServerSocket;
10 import java.net.Socket;
11 
12 /**
13  * Date: 2016-3-19-上午11:10:15 Class_name: Server.java Package_name:
14  * com.lovo.demo_18 Author: ZhangYue Description:
15  */
16 public class Server {
17 
18     public Server() {
19 
20         try {
21             ServerSocket server = new ServerSocket(8090);
22 
23             System.out.println("服务器启动,等待客户端请求...");
24 
25 //            while (true) {
26                 Socket socket = server.accept();// 监听客户端的请求
27 
28                 // 服务器接收客户端的请求
29                 InputStream in = socket.getInputStream();
30                 byte[] by = new byte[1024];
31                 in.read(by);
32                 
33                 System.out.println("服务器端接收到了客户端的请求信息:" + new String(by).trim());
34 
35                 // 服务器响应信息返回给客户端
36                 OutputStream out = socket.getOutputStream();
37 
38                 out.write("Hello".getBytes());
39 
40                 in.close();
41                 out.close();
42                 socket.close();
43                 server.close();
44 //            }
45         } catch (IOException e) {
46             e.printStackTrace();
47         }
48     }
49 
50     public static void main(String[] args) {
51         new Server();
52     }
53 
54 }
Server

服务器一直监听的:

 1 package com.soket.thread;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.Socket;
 7 
 8 public class Client {
 9     
10     public Client(){
11         Socket socket = null;
12         try {
13             socket = new Socket("127.0.0.1",8088);
14             InputStream in = socket.getInputStream();
15             OutputStream out = socket.getOutputStream();
16             
17             String request = "Hello, I'm Client";
18             
19             out.write(request.getBytes());
20             out.flush();
21             System.out.println("客户端发送请求:" + request);
22             
23             byte[] by = new byte[1024];
24             in.read(by);
25             String str = new String(by).trim();
26             System.out.println("客户端接收到服务器响应: " + str);
27             
28             
29             out.close();
30             in.close();
31         } catch (IOException e) {
32             e.printStackTrace();
33         }finally{
34             try {
35                 socket.close();
36             } catch (IOException e) {
37                 e.printStackTrace();
38             }
39         }
40     }
41 
42     /**
43      * @param args
44      */
45     public static void main(String[] args) {
46         // TODO Auto-generated method stub
47         new Client();
48     }
49 
50 }
Client
 1 package com.soket.thread;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 
 9 public class Server {
10     public static boolean isRun = true;
11     public Server(){
12         try {
13             ServerSocket s = new ServerSocket(8088);
14             
15             System.out.println("服务器启动,准备接收客户端请求...");
16             
17             while(true){//利用while循环设置服务器一直监听
18                 Socket socket = s.accept();
19                 /**
20                  * 1. 利用线程,可支持多线程
21                     new SocketThread(socket);
22                 */
23                 
24                 /**
25                  * 2. 直接书写在里面
26                  * */
27                 try {
28                     InputStream in = socket.getInputStream();
29                     OutputStream out = socket.getOutputStream();
30                     
31                     byte[] by = new byte[1024];
32                     in.read(by);
33                     String str = new String(by).trim();
34                     System.out.println("服务器接收到客户端请求:" + str);
35                     
36                     out.write("Hello, I'm Server".getBytes());
37                     
38                     out.flush();
39                     out.close();
40                     in.close();
41                 } catch (IOException e) {
42                     e.printStackTrace();
43                 }finally{
44                     try {
45                         socket.close();
46                     } catch (IOException e) {
47                         e.printStackTrace();
48                     }
49                 }
50                 
51             }
52         } catch (IOException e) {
53             e.printStackTrace();
54         }
55     }
56 
57     public static void main(String[] args) {
58         Server s = new Server();
59     }
60 
61 }
Server

加入线程的服务器:

 1 package com.soket.thread;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.OutputStream;
 6 import java.net.Socket;
 7 
 8 public class SocketThread extends Thread{
 9     private Socket socket;
10     public SocketThread(Socket socket) {
11         this.socket = socket;
12         this.start();
13     }
14     @Override
15     public void run() {
16         try {
17             InputStream in = socket.getInputStream();
18             OutputStream out = socket.getOutputStream();
19             
20             byte[] by = new byte[1024];
21             in.read(by);
22             String str = new String(by).trim();
23             System.out.println("服务器接收到客户端请求:" + str);
24             
25             out.write("Hello, I'm Server".getBytes());
26             
27             out.flush();
28             out.close();
29             in.close();
30         } catch (IOException e) {
31             e.printStackTrace();
32         }finally{
33             try {
34                 socket.close();
35             } catch (IOException e) {
36                 e.printStackTrace();
37             }
38         }
39     }
40 
41 }
SocketThread
原文地址:https://www.cnblogs.com/chenyuanqiu2008/p/5308655.html