JAVA之Socket编程
网上对Socket的诠释很多,也很全,在这里我就不多说了,总之,现在的网络处处都在使用Socket。本帖是一个Socket的例子,用来模拟一个简单的登录系统,只有核心代码,访问数据库、输入神马的统统没有,只是带入一行数据进行处理的代码。废话不说,请看代码。
注:Socket依附的传输协议有TCP的,也有UDP的,本帖中只给出TCP的代码。
TCPServer类,Socket服务端。
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket; // 基于TCP的Socket通信,实现用户登录(服务端)
public class TCPServer {
public static void main(String args[]) {
try {
// 创建一个服务器端的Socket,即ServerSocket,指定绑定的端口,并监听此端口(端口最好是1023之后的端口)
ServerSocket serverSocket = new ServerSocket(8888);
Socket socket = null;
System.out.println("***服务器即将启动,等待客户端的连接***");
// 记录客户端的数量
int count = 0;
// 循环监听等待客户端的连接
while (true) {
// 调用accept()方法开始监听,等待客户端的连接
socket = serverSocket.accept();
// 创建一个新的线程,与客户端线程进行通信
TCPServerThread serverThread = new TCPServerThread(socket);
// 启动线程
serverThread.start();
System.out.println("客户端的数量:" + ++count);
// 获取客户端的IP地址等信息
InetAddress inet = socket.getInetAddress();
System.out.println("当前客户端的IP地址:" + inet.getHostAddress());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
TCPServerThread类,Socket服务端多线程类,为的是能让多个客户端访问服务端。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket; // 服务器端线程处理类
// 让一个服务器可以处理多个客户端的请求
public class TCPServerThread extends Thread {
private Socket socket; // 和本线程相关的socket public TCPServerThread(Socket socket) {
this.socket = socket;
} public void run() {
// 获取输入流,读取客户端发送的信息
InputStream is = null;
InputStreamReader isr = null;
BufferedReader br = null;
OutputStream os = null;
PrintWriter pw = null;
try {
// 执行线程的操作,相应客户端的请求
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info = null;
while ((info = br.readLine()) != null) {
System.out.println("我是服务端,客户端说:" + info);
}
socket.shutdownInput();
// 获取输出流,相应客户端的请求
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("欢迎您!!");
pw.flush();
socket.shutdownOutput();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关闭资源
try {
if (pw != null)
pw.close();
if (os != null)
os.close();
if (br != null)
br.close();
if (isr != null)
isr.close();
if (is != null)
is.close();
if (socket != null)
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
TCPClient类,Socket客户端。
1 import java.io.BufferedReader;
2 import java.io.IOException;
3 import java.io.InputStream;
4 import java.io.InputStreamReader;
5 import java.io.OutputStream;
6 import java.io.PrintWriter;
7 import java.net.Socket;
8 import java.net.UnknownHostException;
9
10 public class TCPClient {
11 public static void main(String[] args) {
12 try {
13 // 创建客户端Socket,指定服务端地址和端口
14 Socket socket = new Socket("localhost", 8888);
15 // 获取输出流,向服务器端发送信息
16 OutputStream os = socket.getOutputStream();
17 PrintWriter pw = new PrintWriter(os);
18 pw.write("用户名:Admin,密码:123456");
19 pw.flush();
20 socket.shutdownOutput();
21 // 获取输入流,读取服务端的相应信息
22 InputStream is = socket.getInputStream();
23 BufferedReader br = new BufferedReader(new InputStreamReader(is));
24 String info = null;
25 while ((info = br.readLine()) != null) {
26 System.out.println("我是客户端,服务端说:" + info);
27 }
28 socket.shutdownInput();
29 // 关闭资源
30 br.close();
31 is.close();
32 pw.close();
33 os.close();
34 socket.close();
35 } catch (UnknownHostException e) {
36 e.printStackTrace();
37 } catch (IOException e) {
38 e.printStackTrace();
39 }
40 }
41 }
JAVA之Socket编程的更多相关文章
- 【JAVA】Socket 编程
对于Java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket.服务端和客户端之间通过Socket建立连接,之后它们就可以进行通信了.首先ServerSocket将 ...
- 【转】java的socket编程
转自:http://www.cnblogs.com/linzheng/archive/2011/01/23/1942328.html 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台 ...
- 基于java的socket编程
#开头的废话#学习java已经半个月了,原本在抠教材里面的字眼时,觉得教材好厚,要看完不知道要到猴年马月去了.突然在网上看到一个教程,里面老师说学编程语言书不用太细看,看个大概,知道里面讲些什么就好, ...
- Java笔记 - Socket编程
两个Java应用程序可以通过一个双向的网络通讯连接实现数据交换,这个双向链路的一端称为一个Socket.java.net包中定义的两个类Socket和ServerSocket,分别用来实现双向链路的c ...
- Java 多线程Socket编程通讯--实现聊天室代码
1.创建服务器类 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import ja ...
- Java NIO Socket编程实例
各I/O模型优缺点 BIO通信模型 BIO主要的问题在于每当有一个新的客户端请求接入时,服务端必须创建一个新的线程处理新接入的客户端链路,一个线程只能处理一个客户端连接 线程池I/O编程 假如所有可用 ...
- java的socket 编程
之前在学校的时候,有时间但是总是学不进去,现在工作了,总想多学点东西,但是又是没有时间来学习,只能在工作的闲暇之余,给自己充充电,随着学习的深入,越来月发现Java真的很强大,几乎什么都可以做的,以下 ...
- Java的socket编程中关于bufferedWriter的发送问题
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); String send ...
- 【Java】socket编程,输入输出中的问题
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); PrintWri ...
随机推荐
- redis安装,配置
下载 cd /usr/local/src wget http://download.redis.io/releases/redis-3.0.7.tar.gz 安装 yum install je ...
- Objective-C 谈谈深浅拷贝,copy和mutable copy都不是完全拷贝
(一)字符串中的指针赋值,copy和mutablecopy NSString和NSString (1)指针赋值 肯定指向同一个字符串地址. (2)copy(和直接指向一样) NSString *str ...
- tmux/screen里面如何用鼠标滚轮来卷动窗口内容
tmux里面用鼠标滚轮来卷动窗口内容 在 tmux里面,因为每个窗口(tmux window)的历史内容已经被tmux接管了,所以原来console/terminal提供的Shift+PgUp/PgD ...
- 树链剖分I 原理
树链剖分(Heavy Light Decomposition, HLD)是一种将对[树上两点间的路径]上[边或点]的[修改与查询]转化到[序列]上来处理的方法. 目的:将树的边或点转化到一个线性结构( ...
- CF 405C Unusual Product(想法题)
题目链接: 传送门 Domino Effect time limit per test:1 second memory limit per test:256 megabytes Descrip ...
- [Android]Unit Test for Android
根据Android Developer文档,对Android的UT做个学习总结: 1. 搭建Eclipse测试环境. Eclipse的ADT(Android Developer Tools) 插件为我 ...
- libjpeg 编译makfile
一.准备 首先需要下载libjpeg库,网址在这里:http://www.ijg.org/ 如果不想编译就在这下载吧:http://pan.baidu.com/s/1hqeTDre 二.编译 1. 解 ...
- Beta Daily Scrum 第七天
[目录] 1.任务进度 2.困难及解决 3.燃尽图 4.代码check-in 5.总结 1. 任务进度 学号 今日完成 明日完成 612 app已完成 将APP交给客户使用 615 app已完成 将A ...
- Beta版本冲刺第四天 12.10
一.站立式会议照片: 二.项目燃尽图: Android端 后台 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 日期合理性的判断,一个是用户反馈的查看 管 ...
- 淘宝npm镜像
来源:https://cnodejs.org/topic/4f9904f9407edba21468f31e 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在 ...