基于socket的简单通讯

应用简单的socket,来达到两台机器的对话。这里提供的是访问server端并按你的要求(名字),索要server服务端中数据库中对应名字的电话。还有一个就是返回自身的IP地址。(数据库内容略)

对于server端的代码:

import  java.io.DataInputStream;
import  java.io.InputStream;
import  java.io.OutputStream;
import  java.io.PrintStream;
import  java.net.ServerSocket;
import  java.net.Socket;

public   class  Myserver  {

    
private final static String PRE_NAME = "Name:";

    @SuppressWarnings( 
"deprecation" })
    
public static void main(String args[]) {

        ServerSocket server;

        Socket socket;

        String s;

        InputStream Is;

        OutputStream Os;

        DataInputStream DIS;

        PrintStream PS;

        
try {

            
// 在端口4321注册服务

            server 
= new ServerSocket(9000);

            
// 监听窗口,等待连接

            System.out.println(
"******************************");
            System.out.println(
"*          server ok         *");
            System.out.println(
"******************************");

            socket 
= server.accept();

            
// 获得对应Socket的输入/输出流

            Is 
= socket.getInputStream();

            Os 
= socket.getOutputStream();

            
// 建立数据流

            DIS 
= new DataInputStream(Is);

            PS 
= new PrintStream(Os);

            DataInputStream in 
= new DataInputStream(System.in);

            
while (true{

                System.out.println(
"");

                System.out.println(
"please wait client's message...");

                System.out.println(
"");

                s 
= DIS.readLine(); // 读入从client传来的字符串

                System.out.println(
"client said:" + s); // 打印字符串

                
// if (s.trim().equals("BYE"))
                
// break; // 如果是"BYE",就退出

                
if (s.toUpperCase().trim().equals("MyAd".toUpperCase())) {
                    s 
= socket.getRemoteSocketAddress().toString();
                }
 
                
else if (s.toUpperCase().trim().startsWith(PRE_NAME.toUpperCase())) {
                    
// 调用数据库查询Address函数
                    if (s.length() > PRE_NAME.length()) {
                        String name 
= s.substring(PRE_NAME.length());
                        
                        name 
= new String(name.getBytes("UTF-8")); /// 汉字要求!~

                        
if (!"".equals(name.trim())) {
                                                        
                            s 
= String.valueOf(Daoconnect.getAdressbyName(name.trim()));
                        }

                    }

                }
 
                
else {

                    System.out.print(
"you say:");
                    s 
= in.readLine();
                }


                PS.println(s); 
// 将读取得字符串传给client

                
if (s.trim().equals("BYE"))
                    
break// 如果是"BYE",就退出

            }


            
// 关闭连接

            DIS.close(); 
// 关闭数据输入流

            PS.close(); 
// 关闭数据输出流

            Is.close(); 
// 关闭输入流

            Os.close(); 
// 关闭输出流

            socket.close(); 
// 关闭sockey

        }


        
catch (Exception e) {

            System.out.println(
"Error:" + e);

        }


    }


}

client端的代码:

 

import  java.net. * ;

import  java.io. * ;

public   class  Myclient  {

    
private final static String HOSTADRESS= "192.168.1.100";
    
    @SuppressWarnings(
{"deprecation"})
    
public static void main(String args[]) {
        
        
//判断主机地址有没有
        System.out.println("***??");
        
if ("".equals(HOSTADRESS) || HOSTADRESS == null

            System.out.println(
"you forget the name of the server!");

            System.exit(
1);
        }

        
        Socket socket;

        String s 
= "";

        InputStream Is;

        OutputStream Os;

        DataInputStream DIS;

        PrintStream PS;

        
try {
            
// 注意端口号要与服务器保持一致
            socket = new Socket(HOSTADRESS, 9000);

            System.out.println(
"*********************************");
            System.out.println(
"*           client ok           *");
            System.out.println(
"*********************************");

            
// 获得对应socket的输入/输出流

            Is 
= socket.getInputStream();

            Os 
= socket.getOutputStream();

            
// 建立数据流

            DIS 
= new DataInputStream(Is);

            PS 
= new PrintStream(Os);

            DataInputStream in 
= new DataInputStream(System.in);

            
while (true{

                System.out.print(
"you say:");

                s 
= in.readLine(); // 读取用户输入的字符串

                PS.println(
new String(s.getBytes("UTF-8"))); // 将读取得字符串传给server

                
if (s.trim().equals("BYE"))
                    
break// 如果是"BYE",就退出

                
else

                
{

                    System.out.println(
"");

                    System.out.println(
"please wait server's message...");

                    System.out.println(
"");

                }


                s 
= DIS.readLine(); // 从服务器获得字符串

                System.out.println(
"server said:" + s); // 打印字符串

                
if (s.trim().equals("BYE"))
                    
break// 如果是"BYE",就退出

            }


            
// 关闭连接

            DIS.close(); 
// 关闭数据输入流

            PS.close(); 
// 关闭数据输出流

            Is.close(); 
// 关闭输入流

            Os.close(); 
// 关闭输出流

            socket.close(); 
// 关闭socket

        }


        
catch (Exception e) {

            System.out.println(
"Error:" + e);

        }


    }


}

 

注意 以上实验的填自己真实的IP地址。

此代码已通过实验是可行的,有问题可以找我联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值