java中的Socket编程

基于Socket的java网络编程

网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端成为一个socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个socket有一个IP地址和一个端口号唯一的确定。

但是,socket所支持的协议类也不仅仅是TCP/IP一种。在java环境下,socket编程主要是指基于TCP/IP协议的网络编程。

2.Socket通讯的过程

         Server端Listen(监听)某一个端口是否有连接请求,Client端向server端发出connect(连接)请求,server端向client端发回Accept(接收)消息。一个连接就建立起来了。Server端和client端都可以通过send,write等方法与对方通信。

Socket工作过程包含四个基本步骤:

(1).创建socket;

(2).打开连接到Socket的输入/输出流;

(3).按照一定的协议对Socket进行读/写操作;

(4).关闭Socket

Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务器端。


客户端代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClient {

	
	public static void main(String[] args) {
		try {
			//创建socket
			Socket socket=new Socket("127.0.0.1", 4700);
			
			//由系统标准输入设备构建bufferedreader对象
			BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
			
			//由socket对象得到输出流,并构造printwriter对象
			PrintWriter os=new PrintWriter(socket.getOutputStream());
			
			//由socket对象得到输入流,并构建相应的bufferreader对象
			BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			
			String readline;
			readline=sin.readLine();
			
			while(!readline.equals("bye"))
			{
				//将系统标准输入读入的字符串输出到server
				os.println(readline);
				
				os.flush();
				System.out.println("Client:"+readline);
				System.out.println("Server:"+is.readLine());
				readline=sin.readLine();
				
			}
			
			os.close();
			is.close();
			socket.close();
			
			
		} catch (UnknownHostException e) {
			
			e.printStackTrace();
		} catch (IOException e) {
		
			e.printStackTrace();
		}
	}
	
}


服务器端代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;


public class SocketServer {

	public static void main(String[] args) {
		
		ServerSocket server=null;
		
		try {
			server=new ServerSocket(4700);
			
			Socket socket=null;
			
			socket=server.accept();
			
			String line;
			BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
			PrintWriter os=new PrintWriter(socket.getOutputStream());
			BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
			
			System.out.println("Client:"+is.readLine());
			line=sin.readLine();
			
			while(!line.equals("bye"))
			{
				os.println(line);
				os.flush();
				System.out.println("Server:"+line);
				System.out.println("Client:"+is.readLine());
				line=sin.readLine();
				
			}
			os.close();
			is.close();
			socket.close();
			server.close();
			
		} catch (IOException e) {
			
			e.printStackTrace();
			
		}
		
	}
	
	
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值