【程序员笔记】socket使用笔记

一 socket解释

Socket就是套接字,就是通过ip地址和通信端口组成套接字地址,然后客户端通过这个地址和服务器进行数据交换。

维基百科解释

socket具体流程

socket活动流程

二 代码实践

server

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.rmi.RemoteException;

public class Server {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try { 
            boolean flag=true;
            Socket client=null;
            String inputLine; 
            ServerSocket serverSocket =new ServerSocket (9000);
            System.out.println("server srart to listen port 9000");
        
            while(flag) { 
                client=serverSocket.accept();
                DataInputStream input=new DataInputStream(new BufferedInputStream(client.getInputStream())); 
                PrintStream output=new PrintStream(new BufferedOutputStream(client.getOutputStream())); 

                while (( inputLine= input.readLine())!=null) { 
                    if(inputLine.equals("-1")){ 
                        flag=false; 
                        break; 
                    } 
                    inputLine=checkNum(Integer.parseInt(inputLine));
                output.println(inputLine); 
                output.flush(); 
                } 
            
                output.close(); 
                input.close(); 
                client.close(); 
            } 
            serverSocket.close(); 
        }catch(IOException e){
            
        } 
        
    }

    private static String checkNum(int num) throws RemoteException {
        // TODO Auto-generated method stub
        
        for(int i=2;i<(num/2+1);i++){
            if(isPrimeNum(i)&&isPrimeNum(num-i)){
                return "Number1="+i+" ; Number2="+(num-i);
            }
        }
        return "not fount";
    }
    
    private static Boolean isPrimeNum(int num){
        
        for(int i=2;i<(num/2+1);i++){
            if(num%i==0){
              return false;
            }
        }
        return true;
    }

}

client

import java.io.DataInputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Client {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try{
                Socket clientSocket =new Socket ("127.0.0.1",9000);
                OutputStream output =clientSocket.getOutputStream();
                DataInputStream input=new DataInputStream(clientSocket.getInputStream());
                
                int c;
                String response;
                while (( c= System.in.read())!=-1){
                    output.write((int)c);
                    if(c=='\n'){
                        output.flush();
                        response=input.readLine();
                        System.out.println(response);               
                    }
                }
                output.close();
                input.close();
                clientSocket.close();
        } catch (Exception e){
                System.err.println("Exception :"+e);
        }
    }
}

在编写过程中注意一下流的问题就可以啦,其他地方比较简单。直接使用已经做好的api就好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,690评论 19 139
  • socket通信原理 socket又被叫做套接字,它就像连接到两端的插座孔一样,通过建立管道,将两个不同的进程之间...
    jiodg45阅读 4,850评论 0 1
  • 各位人类朋友大家好,2016年被称为“知识付费元年”,过了两年,你为知识或者内容付过费吗? 没有?一分钱都没有? ...
    简书大学堂阅读 13,528评论 23 359
  • 技术支持,请联系Email:rcjrtz@yahoo.com
    融创技术支持阅读 942评论 0 0
  • 昨天晚上做了一个梦,感觉自己在科幻片电影中一样。那个梦是这样的…… 这是一个洪荒的世界,各地战乱纷争,我...
    月白星空阅读 3,496评论 0 1