Java中的Socket通信

心情:晴朗

————————

1Java中的Socket

       Socket是套接字,应用程序通常通过套接字向网络发出请求或者应答网络请求。说的开水一点,就是应用程序就是小区用户,socket就是用户家的门牌号,网络就是小区外的世界,比如说,就是电力公司。当电力公司要像某个小区用户收电费时,电力公司就会通过门牌号找到业主收费,业主也为自己的家(id:门牌号)交电费嘛,额额额额,例子举的不好。

      Socket是服务器和客户端之间通信的媒介,也就是TCP/IP建立连接的三次握手过程的实现。一个Socket通信流程:

     1、服务器监听

     2、客户端发出请求

     3、建立链接

     4、通信

     Java中,ServerSocket用于服务器端,Socket是建立网络时用的,建立成功后,应用程序两端都会产生一个Socket实例,操作这个实例,完成对话。对于一个网络链接而言,套接字是平等的,不管是Socket还是ServerSocket都是通过Socket类及其子类完成功能。

2)板栗:一个Socket聊天服务器的建立:

具有向客户端发送数据的功能:

主程序:

package talkWithClient;

public class MainClass {
	public static void main(String[] args){
		new ServerListener().start();
	}
}
线程1——监听线程

package talkWithClient;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JOptionPane;

public class ServerListener extends Thread {
	public void run(){
		try {
			//服务器端的请求
			ServerSocket serverSocket = new ServerSocket(12345);  
			while(true){
				//阻塞等待客户端建立连接
				Socket socket = serverSocket.accept();
				//客户端建立连接
				JOptionPane.showMessageDialog(null, "有客户端链接到本机的12345窗口");
				//响应链接,将socket链接传递给其它线程
				new ChatSocket(socket).start();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

线程2——响应线程

package talkWithClient;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.Socket;

public class ChatSocket extends Thread {
	Socket socket;
	public ChatSocket(Socket s){
		this.socket = s;
	}
	public void out(String out){
		
			try {
				socket.getOutputStream().write(out.getBytes("UTF-8"));
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		
		
	}
	public void run(){
	    int count = 0;
	    while(true){
	    	count++;
	    	out("loop"+count);
	    	try {
				sleep(500);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
	    }
	}

}





猜你喜欢

转载自blog.csdn.net/txlCandy/article/details/50990249