Java套接字

前言: 

  本文补充一下Java关于套接字方面的内容,因为其应用相对比较简单,所以下面介绍两个程序实例。

---------------------------------------------------------------------------------------

1.Socket对接过程

(注:这是之前在网上见过一张图片,大致过程还是比较清晰的)

分析:

  • Socket对接之后的数据传送类似于文件的读写;
  • 流套接字采用TCP传输数据流,一旦数据发送失败将重传,所以具有安全无损的特点。

2.实例一【Server->Client(1:1)】

 1 package socket;
 2
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.io.IOException;
 6 import java.net.Inet4Address;
 7 import java.net.InetAddress;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10 import java.util.Date;
11
12 public class Server {
13
14     public Server(){
15         try {
16             //服务端开启端口8000
17             ServerSocket serverSocket = new ServerSocket(8000);
18             System.out.println("server start at:"+new Date());
19             //等待客户端相应
20             Socket socket  = serverSocket.accept();
21             InetAddress address = socket.getInetAddress();
22             System.out.println("connected with address:"+address.getHostAddress());
23             DataInputStream input = new DataInputStream(socket.getInputStream());
24             DataOutputStream output = new DataOutputStream(socket.getOutputStream());
25
26             //while(true){
27             int num = input.readInt();
28             System.out.println(num);
29             //}
30
31         } catch (IOException e) {
32             e.printStackTrace();
33         }
34     }
35
36     public static void main(String[] args) {
37         new Server();
38     }
39
40 }
 1 package socket;
 2
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.net.Socket;
 6
 7 public class Client {
 8     public static void main(String[] args) throws Exception {
 9
10         System.out.println("--client--");
11
12         //Socket(,)内参数分别设为服务端IP和端口
13         Socket socket = new Socket("localhost", 8000);
14
15         DataInputStream input = new DataInputStream(socket.getInputStream());
16         DataOutputStream output = new DataOutputStream(socket.getOutputStream());
17
18         int x = 222;
19         output.writeInt(x);
20         System.out.println("data convented:"+x);
21     }
22 }

服务端输出(执行之后显示红点,表示等待中...):

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)】

 1 package socket;
 2
 3 import java.io.DataInputStream;
 4 import java.io.DataOutputStream;
 5 import java.net.InetAddress;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8 import java.util.Date;
 9
10 public class SuperServer {
11     private int countOfClient=0;
12     public SuperServer() {
13         try {
14             ServerSocket serverSocket = new ServerSocket(8000);
15             System.out.println("server start at:" + new Date());
16
17             while (true) {
18                 Socket socket = serverSocket.accept();
19                 InetAddress address = socket.getInetAddress();
20                 System.out.println("connected with address:"
21                         + address.getHostAddress());
22                 //为每一位Client创建一个单独的线程
23                 new Thread(new ConnectTask(socket)).start();
24                 countOfClient++;
25                 System.out.println("this is the "+countOfClient + "(th) of client. ");
26             }
27         } catch (Exception e) {
28             e.printStackTrace();
29         }
30
31     }
32
33     public static void main(String[] args) {
34         new SuperServer();
35     }
36
37     class ConnectTask implements Runnable {
38         private Socket socket = null;
39
40         public ConnectTask(Socket socket) {
41             this.socket = socket;
42         }
43
44         @Override
45         public void run() {
46             try {
47                 DataInputStream input = new DataInputStream(
48                         socket.getInputStream());
49                 DataOutputStream output = new DataOutputStream(
50                         socket.getOutputStream());
51
52                 int numFromClient = input.readInt();
53                 System.out.println("number from client:"+numFromClient);
54             } catch (Exception e) {
55                 e.printStackTrace();
56             }
57         }
58
59     }
60
61 }

  以上代码中,服务端创建多线程,给每一个对接的客户端分一个独立的线程;客户端代码不变,还是实例一的代码。程序输出跟实例一近似,只不过这是服务端一直运行着,可供多个客户端连接。(因为独立分配线程,程序运行时资源比较浪费,所以代码仅供参考,有待优化!)

时间: 2024-07-29 14:17:30

Java套接字的相关文章

Java套接字编程实现群聊与私聊[原理版]

简介 运用Java套接字我们几乎可以完成一个网络聊天软件的小产品,本文不涉及UI部分,仅对原理部分用代码演示一下.一个可以多人聊天的小功能,在Linux系统上用telnet亲测可用. 服务器代码 package demo0811.demo3; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.

Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

《JAVA套接字》

套接字(socket)为两台计算机之间的通信提供了一种机制,在 James Gosling 注意到 Java 语言之前,套接字就早已赫赫有名.为了能够方便开发网络应用程序,Unix系统推出了一种应用程序访问通信协议的操作系统调用——Socket套接字,使得程序员很方便的访问TCP/IP协议,从而开发各种网络应用程序.后来Windows也引入Socket,Java语言也引入了套接字的编程模型. 多数程序员,不管他们是否使用 Java 语言进行编码,都不想很多知道关于不同计算机上的应用程序彼此间如何

java套接字(socket)实例

客户端socket 流程: 1.连接远程主机 2.发送数据 3.接收数据 4.关闭流与socket连接 实例: import java.io.*; import java.net.Socket; import java.util.Date; /** * Created by CLY on 2017/7/11. */ public class ClientSocket { public static void main(String[] arg){ int port = 233;//与之连接的服务

JAVA套接字(Socket)101七天系列—第四天【一个简单示例】

一个简单示例  1. 背景 我们将在本部分讨论的示例将阐明在 Java 代码中如何使用 Socket 和 ServerSocket.客户机用Socket 连接到服务器.服务器用 ServerSocket 在端口 3000 侦听.客户机请求服务器 C: 驱动器上的文件内容. 为清楚起见,我们把示例分解成客户机端和服务器端.最后我们将把它们组合起来以使您能看到整体模样. 我们在使用 JDK 1.2 的 IBM VisualAge for Java 3.5 上开发这些代码.要自己创建这个示例,您应有完

Java套接字编程

实现了基于TCP的Java Socket编程实例代码:简单实现了服务器和客户端的套接字编程,并传递简单的字符串.(在服务器声明套接字时需要绑定服务器的端口,端口为临界资源只能一个套接字使用.服务器编程时调用accept()方法,服务器进入等待连接状态.) Java中TCP/IP服务端连接建立的源码实现(socket->bind->listen->accept): (1)在进行套接字编程的时候,首先我们要建立一个服务端,并在服务端建立套接字,为套接字绑定接口,然后监听客户端可能发来的连接建

Java套接字编程向服务器进行读写数据

简介 套接字最初叫伯克利套接字,因为是由伯克利大学最初发明的.在Java中,可以很方便地调用Socket进行网络通信.下面,就试着用套接字向远程服务器进行读写数据. 代码演示 package demo0811.demo1; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStream; import java.io.Input

基于JAVA套接字的简单网络聊天程序

网络中进程之间如何通信 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网

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

最近再学习java的web编程,发现用java创建一个小的服务器和客户端是如此的简单,引用经典图书<Tomcat与Java Web开发技术详解(第二版)>(孙卫琴) 根据书中案例敲代码自己学习,放这里记录一下,以便复习:) 服务器端程序,接收客户端程序发出的HTTP请求,把它打印到控制台,然后解析HTTP请求,并向客户端发回相应的HTTP响应. HTTPServer类中service()方法中,先读取HTTP请求数据,然后获得HTTP请求中的URL,随后创建一个读取本地文件的输入流,该文件的路