Java套接字
前言:
本文补充一下Java关于套接字方面的内容,因为其应用相对比较简单,所以下面介绍两个程序实例。
---------------------------------------------------------------------------------------
1.Socket对接过程
(注:这是之前在网上见过一张图片,大致过程还是比较清晰的)
分析:
- Socket对接之后的数据传送类似于文件的读写;
- 流套接字采用TCP传输数据流,一旦数据发送失败将重传,所以具有安全无损的特点。
2.实例一【Server->Client(1:1)】
package socket; import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date; public class Server { public Server(){
try {
//服务端开启端口8000
ServerSocket serverSocket = new ServerSocket(8000);
System.out.println("server start at:"+new Date());
//等待客户端相应
Socket socket = serverSocket.accept();
InetAddress address = socket.getInetAddress();
System.out.println("connected with address:"+address.getHostAddress());
DataInputStream input = new DataInputStream(socket.getInputStream());
DataOutputStream output = new DataOutputStream(socket.getOutputStream()); //while(true){
int num = input.readInt();
System.out.println(num);
//} } catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
new Server();
} }
package socket; import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket; public class Client {
public static void main(String[] args) throws Exception { System.out.println("--client--"); //Socket(,)内参数分别设为服务端IP和端口
Socket socket = new Socket("localhost", 8000); DataInputStream input = new DataInputStream(socket.getInputStream());
DataOutputStream output = new DataOutputStream(socket.getOutputStream()); int x = 222;
output.writeInt(x);
System.out.println("data convented:"+x);
}
}
服务端输出(执行之后显示红点,表示等待中...):
server start at:Sat Aug 15 19:39:40 CST 2015
connected with address:127.0.0.1
222
客户端输出:
--client--
data convented:222
3.实例二【Server->Client(1:n)】
package socket; import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date; public class SuperServer {
private int countOfClient=0;
public SuperServer() {
try {
ServerSocket serverSocket = new ServerSocket(8000);
System.out.println("server start at:" + new Date()); while (true) {
Socket socket = serverSocket.accept();
InetAddress address = socket.getInetAddress();
System.out.println("connected with address:"
+ address.getHostAddress());
//为每一位Client创建一个单独的线程
new Thread(new ConnectTask(socket)).start();
countOfClient++;
System.out.println("this is the "+countOfClient + "(th) of client. ");
}
} catch (Exception e) {
e.printStackTrace();
} } public static void main(String[] args) {
new SuperServer();
} class ConnectTask implements Runnable {
private Socket socket = null; public ConnectTask(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try {
DataInputStream input = new DataInputStream(
socket.getInputStream());
DataOutputStream output = new DataOutputStream(
socket.getOutputStream()); int numFromClient = input.readInt();
System.out.println("number from client:"+numFromClient);
} catch (Exception e) {
e.printStackTrace();
}
} } }
以上代码中,服务端创建多线程,给每一个对接的客户端分一个独立的线程;客户端代码不变,还是实例一的代码。程序输出跟实例一近似,只不过这是服务端一直运行着,可供多个客户端连接。(因为独立分配线程,程序运行时资源比较浪费,所以代码仅供参考,有待优化!)
Java套接字的更多相关文章
- [置顶] Java套接字Socket编程
1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...
- java套接字(socket)实例
客户端socket 流程: 1.连接远程主机 2.发送数据 3.接收数据 4.关闭流与socket连接 实例: import java.io.*; import java.net.Socket; im ...
- Java套接字Socket编程--TCP参数
在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...
- Java套接字实现应用程序对数据库的访问
最近在完成软件体系结构上机实验时,遇到一个有点点小难度的选做题,题目信息如下: 利用套接字技术实现应用程序中对数据库的访问.应用程序只是利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的 ...
- 用java套接字创建HTTP客户与服务器程序
最近再学习java的web编程,发现用java创建一个小的服务器和客户端是如此的简单,引用经典图书<Tomcat与Java Web开发技术详解(第二版)>(孙卫琴) 根据书中案例敲代码自己 ...
- Java套接字socket编程笔记
相对于C和C++来说,Java中的socket编程是比较简单的,比较多的细节都已经被封装好了,每次创建socket连接只需要知道地址和端口即可. 在了解socket编程之前,我们先来了解一下读写数据的 ...
- java套接字实现接口访问
是学校博客上的:http://blog.csdn.net/z69183787/article/details/17580325
- Java NIO之套接字通道
1.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接字通道.在展开说明之前,咱们先来聊聊套接字的由来.套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为B ...
- java输入输出 -- Java NIO之套接字通道
一.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 – 套接字通道.在展开说明之前,咱们先来聊聊套接字的由来.套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Be ...
随机推荐
- SQL Server系统表sysobjects介绍与使用(转))
这就让sysobjects表格有了用武之地.虽然我不建议你更新这个表格,但是你当然有权对其进行审查. sysobjects 表 在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等)在表中 ...
- 未找到数据,异常处理:exception when no_data_found then 异常处理语句;
未找到数据. 在 select 字段 Into 变量 from 表 where 条件: 这种语句中很有可能会有select 不到数据的问题,导致报错"未找到数据" 要解决这种问题需 ...
- HTML 学习笔记 CSS样式(字体)
css字体属性定义文本的字体系列 大小 加粗 风格 和 变形(如小型大写字母(类似于大写字母字体变小了)) css字体系列 在css中 有两种不同类型的字体系列名称 1.通用字体系列 - 拥有相似外观 ...
- Centos5.8 iptables管理
使用第三方提供的Centos5.8 vmx安装的虚拟机实例, 在安装Tomcat时发现启动后8080端口无法访问, 先检查是否selinux作了限制 查看selinux状态: sestatus 查看s ...
- CodeGenerator.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CiCe ...
- &11,散列表
#1,是什么? 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个 ...
- Theano2.1.12-基础知识之使用GPU
来自:http://deeplearning.net/software/theano/tutorial/using_gpu.html using the GPU 想要看GPU的介绍性的讨论和对密集并行 ...
- "本地泛解析"或者叫做”域名劫持泛解析“,做开发二级域名在内网测试
都不知道怎么称呼这个好,暂且叫 “本地泛解析” 吧 . 大概就是,要做一个二级域对应一个用户的这种功能,类似博客园,我的博客地址是:jerseyblog.cnblogs.com ,你的博客就可能是 x ...
- MPLS基础
1.1 MPLS简介 MPLS(Multiprotocol Label Switching,多协议标签交换)是一种新兴的IP骨干网技术.MPLS在无连接的IP网络上引入面向连接的标签交换概念,将第三 ...
- linux | 管道符、输出重定向
1 输出重定向 ll > a.txt 将 ll的结果写入到a.txt 2 管道符 ls -la | grep h* 这条命令的理解为:ls -la 的结果作为gerp h* 的结果 gerp 是 ...