一个简单地socket通讯Demo

首先贴出来我的项目结构。非常简单,new一个java project,在src下建一个名为socketDemo的package。在包里有两个java文件,一个是客户端,一个是服务端。



第二步,就是完场客户端和服务端的代码了。

服务端:

package socketDemo;
import java.io.*; 
import java.net.*; 
 
public class TcpServer { 
    private ServerSocket ss; 
    private Socket socket; 
    private BufferedReader in; 
    private PrintWriter out; 
    public TcpServer(){ 
         try { 
            ss = new ServerSocket(8889); 
            while(true){ 
            	//等待连接请求
                socket = ss.accept(); 
                //获取ip和端口
                String remoteIP =  socket.getInetAddress().getHostAddress(); 
                String remotePort = ":"+socket.getLocalPort(); 
                System.out.println("客户端请求IP为 :"+remoteIP+remotePort); 
                //获取请求过来的数据
                in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
                String line = in .readLine(); 
                System.out.println("客户端的请求信息 :"+ line); 
                //返回处理信息
                out= new PrintWriter(socket.getOutputStream(),true); 
                out.println("服务端已收到请求信息!"); 
                out.close(); 
                in.close(); 
                socket.close(); 
            } 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
    
    public static void main(String[] args){ 
        new TcpServer(); 
    } 
} 

客户端:

package socketDemo;

import java.io.*;
import java.net.*; 
 
public class TcpClient { 
    Socket socket; 
    BufferedReader in; 
    PrintWriter out; 
    public TcpClient(){ 
        try {
            System.out.println("尝试连接服务器ip端口 127.0.0.1:8889"); 
            socket = new Socket("127.0.0.1",8889); 
            System.out.println("客户端已经成功连接至服务器"); 
            //请求信息拼接
            String ipRequest = "{123456789012345678}{127.0.0.1}{1234}";
            String requestLength = String.format("%04d", ipRequest.length());//获取长度,不足的补0,如长度56,则输出0056
            ipRequest = requestLength+ipRequest;
            System.out.println("发送给服务端的信息是:"+ipRequest); 
            InputStream in_withcode = new ByteArrayInputStream(ipRequest.getBytes());
            BufferedReader line = new BufferedReader(new InputStreamReader(in_withcode));
            out = new PrintWriter(socket.getOutputStream(),true); 
            out.println(line.readLine());
            //获取服务端返回信息
            in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
            System.out.println(in.readLine());
            out.close(); 
            in.close(); 
            socket.close(); 
        } catch (UnknownHostException e) { 
            e.printStackTrace(); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        } 
    } 
     
    public static void main(String[] args){ 
        new TcpClient(); 
    } 
} 

好了,客户端服务端都写好了,接下来先右键运行服务端,这时候控制台什么都不会输出,是一直等待接收客户端的连接。再右键运行客户端,就可以看见客户端和服务端的控制台分别输出了请求信息。到这里整个demo就已经整理完毕。

我自己做的时候情况是别人提供了一个socket接口并告诉我接口ip地址、端口和请求码,我需要做的是通过请求他们的接口获取我需要的信息。而他们的接口由于网络限制,只接收特定的ip。所以,我需要先确定我能连上他们的接口,然后再给他们发送请求。简单的尝试可以直接telnet他们的ip和端口,如果通了就给他们发送测试信息。

有空我会再补充上socket接口的具体原理。





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值