前言: 

  本文补充一下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套接字的更多相关文章

  1. [置顶] Java套接字Socket编程

    1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...

  2. java套接字(socket)实例

    客户端socket 流程: 1.连接远程主机 2.发送数据 3.接收数据 4.关闭流与socket连接 实例: import java.io.*; import java.net.Socket; im ...

  3. Java套接字Socket编程--TCP参数

    在Java的Socket中,主要包含了以下可设置的TCP参数. 属性 说明 默认值 SO_TIMEOUT 对ServerSocket来说表示等待连接的最长空等待时间; 对Socket来说表示读数据最长 ...

  4. Java套接字实现应用程序对数据库的访问

    最近在完成软件体系结构上机实验时,遇到一个有点点小难度的选做题,题目信息如下: 利用套接字技术实现应用程序中对数据库的访问.应用程序只是利用套接字连接向服务器发送一个查询的条件,而服务器负责对数据库的 ...

  5. 用java套接字创建HTTP客户与服务器程序

    最近再学习java的web编程,发现用java创建一个小的服务器和客户端是如此的简单,引用经典图书<Tomcat与Java Web开发技术详解(第二版)>(孙卫琴) 根据书中案例敲代码自己 ...

  6. Java套接字socket编程笔记

    相对于C和C++来说,Java中的socket编程是比较简单的,比较多的细节都已经被封装好了,每次创建socket连接只需要知道地址和端口即可. 在了解socket编程之前,我们先来了解一下读写数据的 ...

  7. java套接字实现接口访问

    是学校博客上的:http://blog.csdn.net/z69183787/article/details/17580325

  8. Java NIO之套接字通道

    1.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接字通道.在展开说明之前,咱们先来聊聊套接字的由来.套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为B ...

  9. java输入输出 -- Java NIO之套接字通道

    一.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 – 套接字通道.在展开说明之前,咱们先来聊聊套接字的由来.套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为Be ...

随机推荐

  1. 备战NOIP每周写题记录(一)···不间断更新

    ※Recorded By ksq2013 //其实这段时间写的题远远大于这篇博文中的内容,只不过那些数以百记的基础题目实在没必要写在blog上; ※week one 2016.7.18 Monday ...

  2. Iterator遍历器 调用Symbol.Iterator属性,遍历器对象。

    Iterator实现原理 创建一个指针对象,指向当前数据结构的起始位置.也就是说,遍历器对象本质上,就是一个指针对象. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员. 第二次调 ...

  3. swift中第三方网络请求库Alamofire的安装与使用

    swift中第三方网络请求库Alamofire的安装与使用 Alamofire是swift中一个比较流行的网络请求库:https://github.com/Alamofire/Alamofire.下面 ...

  4. VS2013 Web项目添加引用项目后,引用上有黄色的感叹号小图标

    RT,重新生成还是不行,然后重新打开VS,VS2013,还是不行. 最后,右键引用-属性-已解析 False. 为什么会未解析呢.终于找到问题根源了. 当前项目.net 4.0版,而引用的项目.net ...

  5. 二叉树的遍历(递归,迭代,Morris遍历)

    二叉树的三种遍历方法: 先序,中序,后序,这三种遍历方式每一个都可以用递归,迭代,Morris三种形式实现,其中Morris效率最高,空间复杂度为O(1). 主要参考博客: 二叉树的遍历(递归,迭代, ...

  6. jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5

    上一篇我们知道了消息驱动Bean的基本用法,实际大型分布式企业应用中,往往会采用高性能的商业Queue产品,比如IBM Webshpere MQ(目前最新版本是7.5 ),下面讲解下如何在Jboss ...

  7. 读“日请求亿级的QQ会员AMS平台PHP7升级实践”博客心得笔记

    PHP7版本尚未普及,对于前辈们为了性能提升有勇气探索新技术敢于尝螃蟹的精神十分敬佩,倍受鼓舞. PHP7升级面临的风险和挑战 对于一个已经现网在线的大型公共Web服务来说,基础公共软件升级,通常是一 ...

  8. 熟悉css/css3颜色属性

    颜色属性无处不在.字体要用颜色,背景可以有颜色,粒子特效更是离不开颜色.本文参考了一些资料简单总结下以备日后查阅. css中颜色的定义方式: 十六进制色 RGB & RGBA HSL & ...

  9. K-means算法和矢量量化

    语音信号的数字处理课程作业——矢量量化.这里采用了K-means算法,即假设量化种类是已知的,当然也可以采用LBG算法等,不过K-means比较简单.矢量是二维的,可以在平面上清楚的表示出来. 1. ...

  10. JAVA GC 简单总结

    GC分代 GC的英文全拼是Garbage Collection,意思是垃圾收集. Java 将堆内存分为三代来管理: - 年轻代 (Young Generation) - 年老代 (Old Gener ...