java tcpip socket编程_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

没有一直监听的:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.socket;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.OutputStream;6 importjava.net.Socket;7 importjava.net.UnknownHostException;8

9 importjavax.swing.JOptionPane;10

11 /**

12 * Date: 2016-3-19-上午11:18:1813 * Class_name: Client.java14 * Package_name: com.lovo.demo_1815 * Author: ZhangYue16 * Description:17 */

18 public classClient {19

20

21 publicClient(){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("客户端接收到服务器端的响应信息:" + newString(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 voidmain(String[] args) {56 newClient();57 }58

59 }

Client

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.socket;2

3 importjava.io.BufferedReader;4 importjava.io.FileInputStream;5 importjava.io.IOException;6 importjava.io.InputStream;7 importjava.io.InputStreamReader;8 importjava.io.OutputStream;9 importjava.net.ServerSocket;10 importjava.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 classServer {17

18 publicServer() {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("服务器端接收到了客户端的请求信息:" + newString(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 voidmain(String[] args) {51 newServer();52 }53

54 }

Server

服务器一直监听的:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.soket.thread;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.OutputStream;6 importjava.net.Socket;7

8 public classClient {9

10 publicClient(){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 = newString(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 *@paramargs44 */

45 public static voidmain(String[] args) {46 //TODO Auto-generated method stub

47 newClient();48 }49

50 }

Client

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.soket.thread;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.OutputStream;6 importjava.net.ServerSocket;7 importjava.net.Socket;8

9 public classServer {10 public static boolean isRun = true;11 publicServer(){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 = newString(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 voidmain(String[] args) {58 Server s = newServer();59 }60

61 }

Server

加入线程的服务器:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.soket.thread;2

3 importjava.io.IOException;4 importjava.io.InputStream;5 importjava.io.OutputStream;6 importjava.net.Socket;7

8 public class SocketThread extendsThread{9 privateSocket socket;10 publicSocketThread(Socket socket) {11 this.socket =socket;12 this.start();13 }14 @Override15 public voidrun() {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 = newString(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值