于TCP协议的socket通信

基于TCP协议Socket服务端和客户端的通信模型:

Socket通信步骤:

  1.建立服务端ServerSocket和客户端Socket

  2.打开连接到Socket的输出输入流

  3.按照协议进行读写操作

  4.关闭相对应的资源

多线程服务器

多线程用来实现 服务器与多客户端之间的通信

基本步骤

  1 服务器创建serverSocket,循环调用accept()等待客户端连接

  2 客户端创建一个scoket并请求和服务器端连接

  3 服务器端接收客户端请求,创建socket与该客户建立专线连接

  4 建立连接的连个socket在一个单独的线程上对话

  5 服务器继续等待新的连接

客户端

 1 package com.socket;
 2
 3 import java.io.BufferedReader;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.io.PrintWriter;
 8 import java.net.Socket;
 9
10 public class Client {
11
12     /**
13      * 基于TCP协议的socket通信
14      * 客户端
15      * @return
16      */
17     public static void main(String[] args) {
18
19         try {
20             //指定服务地址和端口号
21             Socket socket=new Socket("localhost", 8888);
22             //2.获取输出流,向服务器端发送信息     字节流
23             OutputStream op = socket.getOutputStream();
24             //将输出流包装为打印流
25             PrintWriter ps = new PrintWriter(op);
26             ps.write("用户名 client 密码 123 ");
27             ps.flush();
28             //关闭输出流
29             socket.shutdownOutput();
30
31             //从服务器获取输入流
32             InputStream is = socket.getInputStream();
33             BufferedReader bf = new BufferedReader(new InputStreamReader(is));
34             String info = null;
35
36             while((info=bf.readLine())!=null){
37                 System.out.println("服务器说"+info);
38             }
39
40             //关闭资源
41             socket.close();
42         } catch (Exception e) {
43             // TODO Auto-generated catch block
44             e.printStackTrace();
45         }
46     }
47
48 }

服务器端

 1 package com.socket;
 2
 3
 4 import java.io.IOException;
 5 import java.net.InetAddress;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8
 9 public class Server {
10
11     /**
12      * 基于TCP协议的Socket编程
13      *     服务器端
14      * @return
15      */
16     public static void main(String[] args) {
17
18         int count = 0;
19         try {
20             //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
21             ServerSocket serverSocket = new ServerSocket(8888);
22             //循环监听客户端连接
23             while(true){
24                 // 调用accept()方法开始监听,等待客户端的连接
25                 Socket     socket=serverSocket.accept();
26                 SocketThread st = new SocketThread(socket);
27
28                 st.start();
29                 count++;
30                 System.out.println("当前客户数量: "+count);
31
32                 InetAddress address=socket.getInetAddress();
33
34                 System.out.println("当前客户端ip"+address);
35             }
36
37
38         } catch (IOException e) {
39
40             e.printStackTrace();
41         }
42
43
44     }
45
46 }

服务器端线程类

 1 package com.socket;
 2
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStream;
 8 import java.io.PrintWriter;
 9 import java.net.Socket;
10
11 public class SocketThread extends Thread {
12
13     /**
14      * 循环接收客户端线程
15      *
16      * @return
17      */
18     // 和本线程相关的Socket
19     Socket socket = null;
20     public SocketThread(Socket socket) {
21         this.socket = socket;
22     }
23
24     @Override
25     public void run() {
26
27         InputStream is = null;
28         OutputStream os = null;
29         BufferedReader bs = null;
30         PrintWriter pw = null;
31         try {
32             is = socket.getInputStream();
33
34             bs = new BufferedReader(new InputStreamReader(is));
35             String info = null;
36             while ((info = bs.readLine()) != null) {
37
38                 System.out.println("我是服务器    客户端 说 " + info);
39             }
40             socket.shutdownInput();
41
42             // 相应客户端信息
43             os = socket.getOutputStream();
44             pw = new PrintWriter(os);
45             pw.print("你好,欢迎登陆");
46             pw.flush();
47         } catch (IOException e) {
48             // TODO Auto-generated catch block
49             e.printStackTrace();
50         } finally {
51
52             try {
53                 if (os != null)
54                     os.close();
55                 if (is != null)
56                     is.close();
57                 if (bs != null)
58                     bs.close();
59                 if (pw != null)
60                     pw.close();
61                 if (socket != null)
62                     socket.close();
63             } catch (IOException e) {
64                 // TODO Auto-generated catch block
65                 e.printStackTrace();
66             }
67
68         }
69     }
70
71 }
时间: 2024-10-22 13:00:18

于TCP协议的socket通信的相关文章

Android基础入门教程——7.6.3 基于TCP协议的Socket通信(2)

Android基础入门教程--7.6.3 基于TCP协议的Socket通信(2) 标签(空格分隔): Android基础入门教程 本节引言: 上节中我们给大家接触了Socket的一些基本概念以及使用方法,然后写了一个小猪简易聊天室的 Demo,相信大家对Socket有了初步的掌握,本节我们来学习下使用Socket来实现大文件的断点续传! 这里讲解的是别人写好的一个Socket上传大文件的例子,不要求我们自己可以写出来,需要的时候会用 就好! 1.运行效果图: 1.先把我们编写好的Socket服务

Android基础入门教程——7.6.2 基于TCP协议的Socket通信(1)

Android基础入门教程--7.6.2 基于TCP协议的Socket通信(1) 标签(空格分隔): Android基础入门教程 本节引言: 上一节的概念课枯燥无味是吧,不过总有点收获是吧,本节开始我们来研究基于TCP协议的Socket 通信,先来了解下Socket的概念,以及Socket通信的模型,实现Socket的步骤,以及作为Socket服务 端与客户端的两位各做要做什么事情!好的,我们由浅入深来扣这个Socket吧! 1.什么是Socket? 2.Socket通信模型: Socket通信

基于TCP协议的socket通信

一.服务器端 1.创建serverSocket,即服务器端的socket,绑定指定的端口,并侦听此端口 ServerSocket server = new ServerSocket(8888); 2.调用accept()方法,开始侦听,等待客户端的连接,在未连接成功之前,处于阻塞状态,返回的socket,用于与客户端连接 Socket socket = server.accept(); 3.获取输入流,用来读取客户端发来的信息 InputStream is = socket.getInputSt

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

Android基础入门教程——7.6.4 基于UDP协议的Socket通信

Android基础入门教程--7.6.4 基于UDP协议的Socket通信 标签(空格分隔): Android基础入门教程 本节引言: 本节给大家带来Socket的最后一节:基于UDP协议的Socket通信,在第一节中我们已经详细地 比较了两者的区别,TCP和UDP最大的区别在于是否需要客户端与服务端建立连接后才能进行 数据传输,如果你学了前两节TCP的,传输前先开服务端,accept,等客户端接入,然后获得 客户端socket然后进行IO操作,而UDP则不用,UDP以数据报作为数据的传输载体,

网络编程(二)——TCP协议、socket

TCP协议与socket套接字 一.TCP协议 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割. 2.(1)三次握手建链接(2)四次挥手断开链接(3)tcp协议的状态(4)syn洪水攻击与半连接池 3.(1)三次握手建立链接.四次挥手断开链接(各种状态) (2)syn洪水攻击与半连接池 syn洪水攻击:就是让服务器资源耗尽,无法提供正常的服务,间接地拒绝 半连接池:暂时存放请求,用

基于TCP协议的socket套接字编程

基于TCP协议的socket套接字编程 一.什么是Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议. 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. [ 注意:也有

JAVA基础知识之网络编程——-TCP/IP协议,socket通信,服务器客户端通信demo

OSI模型分层 OSI模型是指国际标准化组织(ISO)提出的开放系统互连参考模型(Open System Interconnection Reference Model,OSI/RM),它将网络分为七层:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP协议 TCP/IP是一系列网络通信协议的统称,其中最核心的两个协议是TCP和IP.TCP称为传输控制协议,IP称为互联网络协议. 网络分层除了OSI模型分层,还有TCP/IP模型分层,将网络划分为四层,应用层.传输层.网际层