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 ...
随机推荐
- mplayer依赖关系不满足
mplayer以及其他fork出来的如mplayer2是命令行下的媒体播放器.一般ubuntu等的桌面系统都自带.然而自己使用了一段时间后突然出现缺少库文件,各种依赖关系不满足也未能重新安装.为了以后 ...
- dedeCMS /plus/ad_js.php、/plus/mytag_js.php Vul Via Injecting PHP Code By /plus/download.php Into DB && /include/dedesql.class.php
目录 . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 对于这个漏洞,我们可以简单概括如下 . "/plus/download. ...
- AngularJs $q 承诺与延迟
$q 一个帮助处理异步执行函数的服务.当他们做完处理时,使用它们的返回值(或异常). 受 Kris Kowa’s Q 的启发,这是一个实现promise/deferred对象的启用. $q的两种方式- ...
- 机器学习笔记--KNN算法2-实战部分
本文申明:本系列的所有实验数据都是来自[美]Peter Harrington 写的<Machine Learning in Action>这本书,侵删. 一案例导入:玛利亚小姐最近寂寞了, ...
- BZOJ4445: [Scoi2015]小凸想跑步
裸半平面交. 记得把P0P1表示的半平面加进去,否则点可能在多边形外. #include<bits/stdc++.h> #define N 100009 using namespace s ...
- mysql select 格式化输出
select * from test\G; MySQL的客户端命令行工具,有很多方便使用者的特性,某些方面甚至可以说比Oracle的sqlplus更加人性化.当然从整体来说,还是sqlplus更加方便 ...
- vim 使用总结
VIM分屏显示 1 . 水平分屏split(sp) || 垂直分屏vsplit(vs) :(v)split 输入这样的命令后vi就会将当前的窗口平分为两个,并且在这两个窗口中显示的是同一篇文章.如 ...
- 自然语言9_NLTK计算中文高频词
以下代码仅限于python2 NLTK计算中文高频词 >>> sinica_fd=nltk.FreqDist(sinica_treebank.words()) >>> ...
- N-Gram
N-Gram是大词汇连续语音识别中常用的一种语言模型,对中文而言,我们称之为汉语语言模型(CLM, Chinese Language Model). 中文名 汉语语言模型 外文名 N-Gram 定 ...
- Spring MVC学习笔记——给Controller和视图传值
一.给Controller传值,值将显示在控制台 1.第一种:使用@RequestParam,改HelloController.java //RequestMapping表示用哪一个url来对应 @R ...