TCP服务器和客户端_Socket编程
TCP服务器
- 服务器启动文件
1 import java.io.IOException;
2 import java.net.ServerSocket;
3 import java.net.Socket;
4
5 public class MyServer {
6
7 public static void main(String[] args) {
8
9 ServerSocket serverSocket = null;
10 Socket socket = null;
11
12 try {
13
14 //创建服务器套接字ServerSocket,并绑定服务器端口号,port:1-65536,>1024
15 serverSocket =new ServerSocket(9999);
16
17 while(true) {//可以响应多个各户端
18 System.out.println("服务器开始运行....");
19 //阻塞等待客户端
20 socket = serverSocket.accept();
21
22 //开启线程响应客户端,并将通信套接字socket转入子线程
23 new MyServerThread(socket).start();
24 }
25
26 } catch (IOException e) {
27
28 e.printStackTrace();
29
30 }finally {
31 //完成或者异常时,关闭套接字
32 try {
33
34 socket.close();
35 serverSocket.close();
36
37 } catch (IOException e) {
38
39 e.printStackTrace();
40
41 }
42
43 }
44
45 }
46 }
- 服务器线程文件
1 import java.io.IOException;
2 import java.io.InputStream;
3 import java.io.OutputStream;
4 import java.net.Socket;
5
6 public class MyServerThread extends Thread{
7
8 private Socket socket = null;
9 private InputStream in;
10 private OutputStream out;
11
12 public MyServerThread(Socket socket) {
13
14 this.socket = socket;
15
16 //客户端IP
17 String ip = socket.getInetAddress().getHostAddress();
18 int port = socket.getPort();
19 System.out.println("IP:" +ip +"port:"+port);
20 }
21
22 //发送和接收数据
23 @Override
24 public void run() { //响应客户端(数据收发)
25
26 try {
27 //获取输入输出流
28 in = socket.getInputStream();
29 out = socket.getOutputStream();
30
31 while(true) {//多次
32 //登陆协议 loginnamehellopass123456end
33
34 byte []b = new byte[32];//用于存放read到的数据流
35 in.read(b);//读取数据并存放到b数组中
36
37 String data = new String(b);//将字节流转为字符串
38
39 //读取数据解析登陆信息
40 String logo = data.substring(0,5);//login标志
41 String name = data.substring(data.indexOf("name")+4,data.indexOf("pass"));//data.indexOf("name")返回n的下标
42 String pass = data.substring(data.indexOf("pass")+4,data.indexOf("end"));//data.indexOf("name")返回n的下标
43
44 String msg ="";
45 if (logo.equals("login")) {//登陆?
46 if (name.equals("hello")) {
47 if (pass.equals("123456")) {
48 msg += "登录成功";
49 }
50 else {
51 msg += "密码错误";
52 }
53 }
54 else {
55 msg += "用户不存在";
56 }
57 }
58 else {
59 msg += "输入错误";
60 }
61
62 out.write(msg.getBytes());//将字符串转为字节数组发送到客户端
63 out.flush();
64
65 }
66 } catch (IOException e) {
67
68 e.printStackTrace();
69
70 }finally {
71
72 //g关闭流和套接字
73 try {
74
75 in.close();
76 out.close();
77 socket.close();
78
79 } catch (IOException e) {
80
81 e.printStackTrace();
82
83 }
84 }
85 }
86 }
TCP客户端
1 import java.io.IOException;
2 import java.io.InputStream;
3 import java.io.OutputStream;
4 import java.net.Socket;
5 import java.util.Scanner;
6
7 public class MyClient {
8
9 public static void main(String[] args) {
10
11 Socket socket = null;
12 InputStream in = null;
13 OutputStream out = null;
14
15 try {
16 //1.创建通信套接字,并绑定IP和PORT
17 socket = new Socket("127.0.0.1", 9999);//127.0.0.1 B/C都在
18
19 //2.获取输入输出流
20 in = socket.getInputStream();
21 out = socket.getOutputStream();
22
23 Scanner input = new Scanner(System.in);//从控制台获取数据
24
25 while(true) {//循环发送和接收消息
26
27 String msg = input.next();
28
29 //fa
30 out.write(msg.getBytes());
31 out.flush();
32
33 //收
34 byte []b = new byte[32];
35 in.read(b);
36 String data = new String(b);
37 System.out.println(data.trim());//装不满时去空隔
38
39 }
40
41
42 } catch (IOException e) {
43 e.printStackTrace();
44 }finally {
45 try {
46 out.close();
47 in.close();
48 socket.close();
49 } catch (IOException e) {
50 e.printStackTrace();
51 }
52
53 }
54
55
56 }
57 }
运行效果
- 运行服务端

- 运行客户端后服务器获得信息

- 客户端操作以及对应的服务端响应结果

TCP服务器和客户端_Socket编程的更多相关文章
- Python 绝技 —— TCP服务器与客户端
i春秋作家:wasrehpic 0×00 前言 「网络」一直以来都是黑客最热衷的竞技场.数据在网络中肆意传播:主机扫描.代码注入.网络嗅探.数据篡改重放.拒绝服务攻击……黑客的功底越深厚,能做的就越多 ...
- python socket之tcp服务器与客户端demo
python socket之tcp服务器与客户端demo 作者:vpoet mails:vpoet_sir@163.com server: # -*- coding: cp936 -*- ''' 建立 ...
- Linux系统编程(32)—— socket编程之TCP服务器与客户端
TCP协议的客户端/服务器程序的一般流程 服务器调用socket().bind().listen()完成初始化后,调用accept()阻塞等待,处于监听端口的状态,客户端调用socket()初始化后, ...
- 【卷二】网络二—TCP服务器与客户端
经过上回简单地介绍,大家对服务器多少应该清楚一些了吧!还记得TCP: (Transmission Control Protocol) 传输控制协议? 还记得IP: (Internet Protocol ...
- Node学习笔记:建立TCP服务器和客户端之间的通信
结构: socket是应用层和传输层的桥梁.(传输层之上的协议所涉及的数据都是在本机处理的,并没进入网络中) 涉及数据: socket所涉及的数据是报文,是明文. 作用: 建立长久链接,供网络上的两个 ...
- python写一些简单的tcp服务器和客户端
代码贴上,做个记录 TcpClient # -*- coding:utf-8 -*- import socket target_host = "127.0.0.1" #服务器端地址 ...
- c++ tcp 服务器和客户端例子
目标: 完成一个精简TCP服务器,可接收来自多个用户的请求,并返回结果. 思路: (1)服务器 C++ TCP服务器的实现主要由以下几个函数来完成: a)socket ...
- socket | tcp客户端 tcp服务器 udp客户端 udp 服务器 创建方法
tcp服务器 #coding=utf-8 ''' 这里是tcp服务器端,要先启动 ''' import socket import threading bind_ip = "0.0.0.0& ...
- Linux系统编程(34)—— socket编程之TCP服务器与客户端的交互
前面几篇中实现的client每次运行只能从命令行读取一个字符串发给服务器,再从服务器收回来,现在我们把它改成交互式的,不断从终端接受用户输入并和server交互. /* client.c */ #in ...
随机推荐
- CentOS_Server with GUI入门
安装模式: Server with GUI:基本的桌面系统,包括常用的桌面软件,如文档查看工具 Minimal:基本的系统,不含有任何可选的软件包 Basic Server :安装的基本系统的平台支持 ...
- SpringMVC笔记(3)
一.SpringMVC 拦截器 1.1 快速入门 步骤 创建拦截器类实现HandlerInterceptor接口 public class MyInterceptor01 implements Han ...
- Python面试题小试牛刀
1.声明变量注意事项有那些? 1.变量名只能用字母.数字或下划线的任意组合 2.变量名不能以数字为第一个字符 3.内置函数名不能用 2.如何查看变量在内存中的地址? id(变量名) 3.写代码 a. ...
- Photoshop 各混合模式 RGB 是如何计算的
原文链接:https://www.jb51.net/photoshop/249182.html 1.正常模式(Normal) 默认模式,显示混合色图层的像素,没有进行任何的图层混合.这意味着基色图层( ...
- multipass指定virualbox搭建k8s集群(选择docker作为默认容器)
目录 前言 步骤 初始化三台虚拟机 统一安装docker 修改docker镜像源 查看masterIP 安装master节点(重点设置) 查看master的token 安装worker节点 测试 部署 ...
- 前后端数据交互(五)——什么是 axios?
一.什么是 axios ? axios是基于 Promise 的 ajax 封装库,也是前端目前最流行的 ajax 请求库.简单地说发送 get.post 请求,是一个轻量级的库,使用时可直接引入. ...
- MySQL——select语句
select: 基本语法:select 列名 或 * from 对象(表.视图...) where: = > < <> != like ----> like 'old%' ...
- Python网编之简单的聊天小程序
服务端: import socket sock = socket.socket() sock.bind(("127.0.0.1",8899)) sock.listen(5) whi ...
- Appium问题解决方案(8)- selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occurred while processing the command. Original error: Could not sign with default certificate.
背景 运行时代码报错: selenium.common.exceptions.WebDriverException: Message: An unknown server-side error occ ...
- VUE002. 动态使用webpack打包处理后的静态图片路径({ img: require('xxx.png') })
案例摘要 需求是通过v-for循环渲染数组中数据,其中包括本地包的图片文件.话不多说直接上代码: <a-radio-group class="template-radio"& ...