Java:Socket通信
Socket通常也称作"套接字"。用于描写叙述IP地址和port,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
ServerSocket用于server端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完毕所需的会话。
对于一个网络连接来说,套接字是平等的,并没有区别,不由于在server端或在client而产生不同级别。套接字之间的连接过程能够分为三个步骤:server监听,client请求,连接确认。
实例一:基于TCP/IP协议的Socket通信一对一:
package z_test_Socket_Demo; import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TestServerSocket { public static void main(String[] args) {
// TODO 自己主动生成的方法存根
ServerSocket serverSocket = null;
Socket socket = null;
OutputStream outputStream = null;
try {
serverSocket = new ServerSocket(8888); // 指定监听端口
System.out.println("==>> accepting");
socket = serverSocket.accept(); // 监听client的请求,方法堵塞,请求成功,返回socket对象
outputStream = socket.getOutputStream(); // 获得输出流
String string = "==>> Hello client,This is a message from server"; // 随便给client发点东西
byte[] buffer = string.getBytes();
outputStream.write(buffer);
outputStream.flush();
} catch (IOException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} finally {
try {
serverSocket.close();
socket.close();
outputStream.close();
} catch (IOException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
}
}
}
}
package z_test_Socket_Demo; import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException; public class TestClientSocket { public static void main(String[] args) {
// TODO 自己主动生成的方法存根
Socket socket = null;
InputStream inputStream = null;
try {
// socket = new Socket(InetAddress.getLocalHost(), 8888);
// 请求连接服务器的8888端口,构造方法通常能够指定IP地址
socket = new Socket("10.25.26.141", 8888);
inputStream = socket.getInputStream(); // 获得输入流
byte[] buffer = new byte[64];
int temp = 0;
while ((temp = inputStream.read(buffer)) != -1) { // 将数据读入字节数组,此方法堵塞
System.out.println(new String(buffer));
}
} catch (UnknownHostException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} catch (IOException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} finally {
try {
socket.close();
inputStream.close();
} catch (IOException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
}
}
}
}
先执行服务器端,打印结果:
==>> accepting
然后执行client,打印结果:
==>> Hello client,This is a message from server
实例二:基于TCP/IP协议的Socket通信一对多:
仅仅须要把服务器段用一个线程死循环就可以
package z_test_Socket_Demo; import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; public class TestServerSocket { public static void main(String[] args) {
// TODO 自己主动生成的方法存根
new Thread(new ServerThread()).start();
} private static class ServerThread implements Runnable { @Override
public void run() {
// TODO 自己主动生成的方法存根
int i = 1;
while (true) {
ServerSocket serverSocket = null;
Socket socket = null;
OutputStream outputStream = null;
try {
serverSocket = new ServerSocket(8888); // 指定监听端口
System.out.println("==>> accepting client" + i++);
socket = serverSocket.accept(); // 监听客户端的请求,方法堵塞,请求成功。返回socket对象
outputStream = socket.getOutputStream(); // 获得输出流
String string = "==>> Hello client" + i++
+ ",This is a message from server"; // 随便给客户端发点东西
byte[] buffer = string.getBytes();
outputStream.write(buffer);
outputStream.flush();
} catch (IOException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
} finally {
try {
serverSocket.close();
socket.close();
outputStream.close();
} catch (IOException e) {
// TODO 自己主动生成的 catch 块
e.printStackTrace();
}
}
}
}
}
}
执行服务器段,打印结果:
==>> accepting client1
执行client,client打印结果:
==>> Hello client1,This is a message from server
再次执行client,client打印结果:
==>> Hello client2,This is a message from server
相当于两个不同的client请求连接server
弄懂的了基于TCP/IP协议的Socket通信,基于其它协议的Socket通信应该能够非常快就能弄明确了。
Java:Socket通信的更多相关文章
- java socket通信-传输文件图片--传输图片
ClientTcpSend.java client发送类 package com.yjf.test; import java.io.DataOutputStream; import java.io ...
- java Socket通信使用BufferedReader和BufferedWriter的注意事项
注意事项:readLine()要求有换行标识,write()要输出换行标识,要调用flush()刷新缓冲区. 以下是取自java socket通信中的一小段代码. BufferedReader rea ...
- Java Socket通信读取相关信息代码
转自:http://developer.51cto.com/art/201003/190206.htm Java Socket通信读取有不少需要我们注意的知识点.当我们在使用的时候有很多的问题摆在我们 ...
- Java socket通信
首先抛开语言层面,简单介绍一下socket通信过程: 1.服务器端开启监听端口,阻塞进程 等待客户端连接 2.客户端连接,这时就产生了一个socket socket就相当于一个传递消息的通道,一般都 ...
- Java Socket通信以及可能出现的问题解决
Java中基于TCP协议实现网络通信的两个类:客户端的Socket和服务器端的ServerSocket. Socket通信模型如图所示: 不管Socket通信的功能有多复杂,任何socket通信过程的 ...
- Java Socket通信实现私聊、群聊
前言 闲言少叙,上代码! 代码编写 server服务端 /** * 服务端 */ public class Server { private static ServerSocket server = ...
- Java Socket 通信实例 - 转载
基于Tcp协议的简单Socket通信实例(JAVA) 好久没写博客了,前段时间忙于做项目,耽误了些时间,今天开始继续写起~ 今天来讲下关于Socket通信的简单应用,关于什么是Socket以及一些 ...
- Java Socket通信实例
一.简单的客户端与服务器一对一连接: Socket通信的步骤: 1.创建ServerSocket和Socket 2.打开连接到Scket的输入/输出流 3.按照协议对Socket进行读/写操作 4.关 ...
- 【Java】Java Socket 通信演示样例
用socket(套接字)实现client与服务端的通信. 这里举两个样例: 第一种是每次client发送一个数据,服务端就做一个应答. (也就是要轮流发) 另外一种是client能够连续的向服务端发数 ...
- java Socket通信,客户端与服务端相互发消息
1.通信过程 网络分为应用层,http.ssh.telnet就是属于这一类,建立在传输层的基础上.其实就是定义了各自的编码解码格式,分层如下: 2.Socket连接 上述通信都要先在传输层有建立连接的 ...
随机推荐
- NHibernate系列学习(一)-看看用NH怎么做增速改查
1.本次所有代码是在一下环境下运行的 学习系统:win8 64bit 开发环境:VS2013,MSSQL2012 NHibernate版本:NHibernate-4.0.3.GA [文章结尾有本次笔记 ...
- Android 6.0一个完整的native service
上一篇博客<Android 6.0 如何添加完整的系统服务(app-framework-kernel)>http://www.cnblogs.com/hackfun/p/7418902. ...
- 背包系列 hdu3449 有依赖背包
这道题真正困扰了笔者3,4天,冥思苦想几日无果之后,只能去找大牛的解法.结合网上的大牛解法与自己的理解,笔者终于解决了这个坑了,在此小庆幸一下. 原题如下: Consumer Time Limit: ...
- JS——switch case
语法: switch(n) { case 1: 执行代码块 1 break; case 2: 执行代码块 2 break; default: n 与 case 1 和 case 2 不同时执行的代码 ...
- win10 打开chm文件内容空白如何解决
win10 打开chm文件内容空白如何解决 .CHM文件是非常常见的帮助文件格式.由于其便携性,很多小说或杂志也会采用chm格式.win7/win8.1/win10系统,由于采用了UAC,致使原本在x ...
- which
功能说明:显示命令的全路径. 参数选项: -a 默认在PATH路径中由前往后查找命令,如果查找到了,就停止匹配.使用-a选项将遍历所有PATH路径,输出所有匹配项. 参数-a把所有匹配命令路 ...
- parseInt()函数
parseInt()转化整形是从左往右,取出第一个整型,如:10a10b,则显示10: //20170719补充 如果该字符串第一个字符是0,那么该字符串会基于八进制而非十进制来求值,在八进制中,8和 ...
- P2080 增进感情
题目背景 小明和小红的感情,是慢慢发展起来的. 题目描述 他们对对方分别有一个好感值.定义两人的亲密程度为两人的好感值之和. 如果他们的亲密程度达到V,则他们将走到一起.他们以后的生活将取决于两人的好 ...
- (C/C++学习)4.C++类中的虚函数表Virtual Table
说明:C++的多态是通过一张虚函数表(Virtual Table)来实现的,简称为V-Table.在这个表中,主要为一个类的虚函数的地址表,这张表解决了继承.覆写的问题,保证其真实反应实际的虚函数调用 ...
- Mysql数据库操作(二)
存储过程 1.创建过程 delimiter // create procedure p1() BEGIN select * from t1; END// delimiter; --执行存储过程 cal ...