java socket:客户端与服务器端通信

Socket:网络上两个程序通过一个双向的通信连接实现数据交换,连接的一段为一个socket,要实现两个程序的数据交换一般要一对socket。
这个定义参考自百度百科,我觉得说的还不错,另外,socket的英文有‘插口’的意思,其实也可以理解为程序的插口等等。
socket在实现程序通信方面具有重要意义,我看到它出现在c/c++、java、python、c#等诸多语言中,看来学什么语言都难逃此关。。
这里我用了一个最简单的socket客户端与服务的通信,对socket的基本过程做了初步的了解,在这里记录下代码,方便以后学习:
服务器端:


import java.io.*;
import java.net.*;
import java.util.*;
public class sever {
	
	public void sever(){	
		try{
				//建立服务器端的socket
				ServerSocket sk=new ServerSocket(12345);
				
				while(true){//服务器无穷循环等待客户端的请求	
					System.out.println("****服务器已经启动,等待客户端连接...****");
					//accept()在等待客户端连接上来前保持闲置,当客户端连接上来,返回一个socket以便与客户端通信,ServerSocket与socket端口不同,以便ServerSocket空出来等待与其它用户通信
					Socket socket=sk.accept();
					//利用PrintWriter写入流
					PrintWriter writer=new PrintWriter(socket.getOutputStream());
				    //在服务器端由用户键入字符串
					System.out.println("input:");
					Scanner in = new Scanner(System.in);
					String s = in.nextLine();
					//写入流
					writer.println(s);
					//关闭与socket的连接
					writer.close();				
				}
		}catch(Exception ex){
			ex.printStackTrace();		
		}		
	}
	public  static void main(String[] args){
		sever myserver=new sever();
		myserver.sever();		
	}
}

客户端:

import java.io.*;
import java.net.*;
public class client {
	public void go(){
		try{
			//建立客户端的socket,服务端的ip,客户端连接的端口号
			Socket socket=new Socket("localhost",12345);
			//建立连接到socket的底层输入串流			
			InputStreamReader streamreader=new InputStreamReader(socket.getInputStream());
			//建立BufferedReader读取输入串流
			BufferedReader reader=new BufferedReader(streamreader);
			//度取结果给字符串
			String advice=reader.readLine();
			//客户端显示读取的结果
			System.out.println(advice);
			//关闭BufferedReader
			reader.close();				
		}catch(Exception ex){
			ex.printStackTrace();		
		}			
	}
	public static void main(String[] args){
		client myclient=new client();
		myclient.go();
	}		
}

执行效果:在服务器端输入hello,客户端接收并显示:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值