服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

分享socket客户端-服务器入门代码

    这是从另一个论坛的代码修改的,原来有很多错误,我已经修改,供大家欣赏!


    这中间还用到了设计模式中的代理模式,还有一些jframe入门的东西


    1 客户端


public class javaclient extends jframe implements actionlistener//以jframe为基类,实现actionlistener接口
{
    jbutton sendbutton; //"发送"按钮
    jtextfield inputfield; // 输入框
    jtextarea outputarea; // 服务器返回框
    static clientagent ca;
    public javaclient() //在建构函数中完成图形界面的初始化
    {
        inputfield=new jtextfield("这里输入..."); //供客户端输入的文本框
        outputarea=new jtextarea("服务器返回"); //显示服务器返回数据的文本域
        sendbutton=new jbutton("发送");
        jpanel panel=new jpanel(); //新建面板
        panel.setlayout(new borderlayout()); //设置面板风格为borderlayout
        panel.add(inputfield,borderlayout.north); //放置控件
        panel.add(outputarea,borderlayout.center);
        panel.add(sendbutton,borderlayout.page_end);
        sendbutton.addactionlistener(this);
        settitle("java通讯客户端");
        setcontentpane(panel);
    }
    public static void main(string[] args)
    {
        javaclient frame=new javaclient();
        frame.pack();//注意javaclient是jframe的派生类,调用基类方法
        frame.setvisible(true);
        ca=new clientagent("127.0.0.1",1001); //传递服务器名称和端口号
    }
    public void actionperformed(actionevent ae)
    {
        if(ae.getsource()==sendbutton) //判断事件源控件是否是"发送"按钮
        {
        try
        {
            ca.sendrequest(inputfield.gettext()); //发送文本框中的文本
            system.out.println("send:"+inputfield.gettext());
        }catch(exception ex)
        {
            ex.printstacktrace();
        }
        outputarea.append("/n"+ca.getresponse()); //接收服务器回应并写入文本域
        }
    }
}


    2客户代理端


import java.io.*;
import java.net.*;
/**
 * @author administrator
 *
 * todo to change the template for this generated type comment go to
 * window - preferences - java - code style - code templates
 */
public class clientagent {
    printstream ops; //输出流(指向服务器)
    datainputstream ips;//输入流(来自服务器)
    bufferedreader bf;
    string cltrequest;//客户端请求
    string svrresponse;//服务器端回应


    public clientagent(string servername,int port)
    {
        try
        {
        socket clientsocket=new socket(servername,port ); //根据服务器名和端口号建立socket
        ops=new printstream(clientsocket.getoutputstream());//获得socket的输出流
        //ips=new datainputstream(clientsocket.getinputstream());//获得socket的输入流
        bf = new bufferedreader(new inputstreamreader(clientsocket.getinputstream()));
        }
        catch(exception e)
        {
        system.out.println("无法连接服务器!");
        }
    }
    public void sendrequest(string request)
    {
        ops.println(request); //向socket的输出流写入字符串
    }
    public string getresponse()
    {
        string str=new string();
        try
        {
            //str=ips.readline(); //从socket的输入流读入字符串


            str = bf.readline();
            system.out.println("服务器返回:"+str);
        }
        catch(ioexception e){} //必须捕获错误
        return str;
    }
}


    3 服务器端


import java.io.*;
import java.net.*;
/**
 * @author administrator
 *
 * todo to change the template for this generated type comment go to
 * window - preferences - java - code style - code templates
 */
public class serveragent {
    serversocket svrskt=null;
    socket cltskt=null;
    //datainputstream input=null; //输入流,来自客户端
    bufferedreader inf=null;
    printstream output=null; //输出流,指向客户端


    public serveragent(int port) //main()函数传递监听端口号
    {
        system.out.println("服务器代理正在监听,端口:"+port);
        try
        {
            svrskt=new serversocket(port); //开始监听
        }catch(ioexception e){system.out.println("监听端口"+port+"失败");}
        try
        {
            cltskt=svrskt.accept(); //接收连接请求
        }
        catch(ioexception e){system.out.println("连接失败");}
        try
        {
            //input=new datainputstream(cltskt.getinputstream()); //获得输入流
            inf = new bufferedreader(new inputstreamreader(cltskt.getinputstream()));
            output=new printstream(cltskt.getoutputstream()); //获得输出流
        }
        catch(ioexception e){}
        output.println("欢迎......");
    }
    public string getrequest()
    {
        system.out.println("server getrequest");
        string frmclt=null;
        try
        {
            //frmclt=input.readline();
            frmclt = inf.readline();
            system.out.println("after server getrequest:"+frmclt);
        }
        catch(exception e){
            system.out.println("无法读取端口.....");
            system.exit(0);
        }
        return frmclt;
    }
    public void sendresponse(string response)
    {
        system.out.println("server sendresponse");
        try
        {
            output.println(response);
        }
        catch(exception e){
            system.out.println("写端口失败......");
            system.exit(0);
        }
    }
    public static void main(string[] args) throws ioexception
    {
        serveragent sa=new serveragent(1001);
        while(true)
        {
            sa.sendresponse(sa.getrequest());
        }
    }


}

扫描关注微信公众号