Socket:套接字

流式套接字:基于TCP协议的Socket网络编程

工作方式:

1.客户端A连接到服务器;

2.服务器建立连接并把客户端A添加到列表;

3.客户端B、C...连接;

4.客户端B送出消息到服务器;

5.服务器将信息发送给客户端B、C...。

要点:

1.如何建立客户端与服务器之间的初始连接;

2.如何传送信息到服务器;

3.如何接收来自服务器的信息。

案例:客户端向服务器发送登录请求,服务器收到后回复登录成功信息。

服务器代码:

package com.yh.mySocket;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; public class LoginServer {
public static void main(String[] args) {
ServerSocket serversocket = null;
Socket socket = null;
InputStream is = null;
OutputStream os = null;
BufferedReader br = null;
try {
// 创建一个服务器Socket
serversocket = new ServerSocket(5000);
// 使用accept()等待用户的通信
socket = serversocket.accept();
// 获得输入流,获得相应的用户请求
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String info;
while((info = br.readLine())!=null) {
System.out.println(info);
}
// 获得输出流,给客户端发送请求
os = socket.getOutputStream();
String reply = "登陆成功!";
byte[] replys = reply.getBytes();
os.write(replys);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
// 释放资源
os.close();
br.close();
is.close();
socket.close();
serversocket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

客户端代码:

package com.yh.mySocket;

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException; public class LoginClient {
public static void main(String[] args) {
Socket socket = null;
OutputStream os = null;
InputStream is = null;
BufferedReader br = null;
try {
// 创建一个客户端Socket,参数为客户端IP和指定端口号,此处客户端和服务器在同一台电脑,所以IP地址相同
socket = new Socket("localhost",5000);
// 通过输出流,给服务器发送请求
os = socket.getOutputStream();
String info = "用户名:YeHuan; 密码:12345";
byte[] infos = info.getBytes();
os.write(infos);
// 关闭输出流
socket.shutdownOutput(); // 获得输入流,接收服务器请求
is = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(is));
String reply;
while((reply = br.readLine())!=null) {
System.out.println(reply);
} } catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
is.close();
os.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

Socket网络编程(案例)的更多相关文章

  1. python------面向对象进阶 Socket网络编程

    一.Socket网络编程 1.七层模型,亦称OSI(Open System Interconnection)参考模型,是参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系 ...

  2. Socket网络编程(TCP/IP/端口/类)和实例

    Socket网络编程(TCP/IP/端口/类)和实例 原文:C# Socket网络编程精华篇 转自:微冷的雨 我们在讲解Socket编程前,先看几个和Socket编程紧密相关的概念: TCP/IP层次 ...

  3. Java 学习之网络编程案例

    网络编程案例 一,概念 1,网络编程不等于网站编程 2,编程只和传输层打交道,即TCP和UDP两个协议 二,案例 1,TCP实现点对点的聊天 Server端:两个输入流:读客户端和控制台,一个输出端: ...

  4. Socket网络编程-SocketServer

    Socket网络编程-SocketServer 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.SocketServer概述 socket编程过于底层,编程虽然有套路,但是想要写 ...

  5. Socket网络编程-UDP编程

    Socket网络编程-UDP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.UDP编程概述 1>.UDP服务端编程流程 创建socket对象.socket.SOCK_ ...

  6. Socket网络编程-TCP编程

    Socket网络编程-TCP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.socket介绍 1>.TCP/IP协议 2>.跨网络的主机间通讯 在建立通信连接的 ...

  7. Linux Socket 网络编程

    Linux下的网络编程指的是socket套接字编程,入门比较简单.在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾.总感觉每次看的时候都有收获,但是每次看完了之后 ...

  8. Python Socket 网络编程

    Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ ...

  9. Python全栈【Socket网络编程】

    Python全栈[socket网络编程] 本章内容: Socket 基于TCP的套接字 基于UDP的套接字 TCP粘包 SocketServer 模块(ThreadingTCPServer源码剖析) ...

随机推荐

  1. Linux 使用 top 命令查看系统的运行情况

    top命令显示界面 top命令默认在一个特定间隔(3秒)后刷新显示.要手动刷新,用户可以输入回车或者空格. top - 18:32:45 up 230 days, 2:01, 1 user, load ...

  2. 怎么用Mac电脑创建多个桌面

    区别于win的单个桌面,Mac电脑可以设置多个桌面,方面用户处理各种多乱杂的情况.究竟怎么用Mac电脑创建多个桌面呢?一起来看看吧! 1.首先打开Mission Control,点击偏好设置 2.然后 ...

  3. 自写脚本实现上线前本地批量压缩混淆 js , css 代码。

    最近做项目遇到一个要求,就是把本地的 js 和 css 进行压缩后再上线,由于之前项目并没有使用 webpack 之类的库,项目上也因为一些机密不能在线上压缩,这无疑给代码打包压缩带来了很大麻烦,于是 ...

  4. spring里的三大拦截器

    Filter 新建 TimeFilter @Component public class TimeFilter implements Filter { @Override public void in ...

  5. DotNetCore跨平台~EFCore2.0连接Mysql的烦恼-已解决

    回到目录 对于传统的nuget包,我们习惯上用官方或者大型组织的,因为它们比较考靠谱,但就在前两天.net core2.0发布后,我把efcore也升级到2.0了,mysql.EfCore也升级到支持 ...

  6. el-upload 上传文件和上传图片的基本用法

    el-upload 上传excel <template> <el-form :model="form"> <el-form-item label=&q ...

  7. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  8. qutebrowser 只用键盘操作的浏览器

    一个 Qt 库制作的最简化浏览器,内核是 Chromium.最大特点就是它自带命令行,可以完全用键盘操作. 下载地址: 链接:https://share.weiyun.com/5Y2Ajvn 密码:m ...

  9. [PHP] MIME邮件协议的multipart类型

    邮件协议中的三种情况,对应下面的三种类型 multipart/mixed可以包含附件.multipart/related可以包含内嵌资源.multipart/alternative 纯文本与超文本共存 ...

  10. Java Calendar类使用总结

    平时在浏览一些网站时,有些网站会显示出当前时间,如现在是xx年xx月xx日 xx时xx分xx秒,在实际的开发过程中,也会涉及到日期和时间的计算,Java中提供了一个专门的类Calendar来处理日期与 ...