一.网络通信,常见的结构是C/S模式。客户端在需要服务时向服务器请求连接,服务端被动接收连接,建立连接后,双方开始通信。服务器进程一般作为守护进程,一直运行,不断监听网络端口,被动接收客户端的请求,当接收到客户的请求时,会启动一个服务进程来处理客户的请求,并继续监听网络端口。(上 ...
一.网络通信,常见的结构是C/S模式。客户端在需要服务时向服务器请求连接,服务端被动接收连接,建立连接后,双方开始通信。服务器进程一般作为守护进程,一直运行,不断监听网络端口,被动接收客户端的请求,当接收到客户的请求时,会启动一个服务进程来处理客户的请求,并继续监听网络端口。
(上图转自:http://tutorials.jenkov.com/java-networking/index.html)
二.网络上进程之间通过双向的通信连接来实现信息的交换。这样连接的一端称为一个Socket。Socket由IP号和端口号确定。在java中使用Socket来实现基于TCP/IP协议的网络程序,主要涉及到下面几步:
客户端:
1.根据服务器的IP和端口号,建立Socket
2.打开输入、输出流
3.对Socket进行读写
4.关闭输入、输出流,关闭套接字
服务器端:
1.根据端口号建立ServerSocket
2.被动监听客户端请求
3.当监听到客户端请求时,接收请求,启动工作线程,处理请求。若不再接收请求时,进入4;否则,继续监听,转2
4.关闭ServerSocket
下面以例子来说明:
客户端代码:
package com.net.examples;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class Client { /** * @param args * @throws IOException * @throws UnknownHostException * @throws InterruptedException */ public static void main(String[] args) throws UnknownHostException, IOException, InterruptedException { //这里假设有三个client,每个client分别发送一次请求 int clientCount = 3; MyRunable run = new MyRunable(); while(clientCount > 0){ //每个线程模拟一个client,三个线程名分别为1,2,3 new Thread(run,clientCount+"").start(); clientCount--; } }}//定义MyRunable,重写run方法实现client线程class MyRunable implements Runnable{ public void run() { int messCount = 2; Socket socket = null; DataOutputStream o = null; DataInputStream in = null; try { //1.创建Socket,建立连接 socket = new Socket("127.0.0.1",8080); //2.打开输入输出流 o = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream()); System.out.println("Clients begin send messages"); //每个client对Socket写两次 while(messCount > 0 ){ try { //3.对Socket进行写 o.writeUTF("" + messCount); o.flush(); } catch (IOException e) { e.printStackTrace(); } System.out.println("I am client:"+Thread.currentThread().getName() +",I send message:" + messCount); messCount--; } //对Socket进行读 System.out.println("I am client:" + Thread.currentThread().getName() + ",and server "+ in.readUTF() + "(me!)"); } catch (IOException e2) { e2.printStackTrace(); } finally{ try { //4.关闭输入输出流,关闭socket,释放资源 o.close(); in.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }}
原标题:java Socket编程
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。