插播一条关于Socket编程的小程序,

socket编程是我们杨老师给我们最后一个上机实验,由于没有涉及到数据库,可能它的效率就没有那么高,就是简单的将线程和cs模式运用到一块,所以。写的有问题的地方还希望大神指出来:
话不多说,直接上代码:
服务端
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class SingleTalkServer {

public void handle() throws IOException{  
    ServerSocket serverSocket = null;  
    try {  
        serverSocket = new ServerSocket(4444);  
    } catch (IOException e) {  
        System.err.println("Could not listen on port: 4444.");  
        System.exit(1);  
    }  

    Socket clientSocket = null; 
    int clientNumber = 0;
    try {  
        while(true){
        clientSocket = serverSocket.accept();  //程序将在此等候客户端的连接
        clientNumber++;   //记录客户数目
        new MultiTalkServerThread(serverSocket,clientSocket, clientNumber).start();  //创建一个新线程处理此客户请
        }
    } catch (IOException e) {  
        System.err.println("Accept failed.");  
        System.exit(1);  
    }  
System.out.println("Accept OK!");  



}  

public static void main(String[] args )throws IOException{  
    new SingleTalkServer().handle();  
}  }  

class MultiTalkServerThread extends Thread implements ActionListener
{
private Frame f;
private Button sending,receiveing;
private TextField send;
private TextArea receive;
private PrintWriter out;
private BufferedReader in;
private String sinputLine, inputLine;
private String record;
boolean sinbye,inbye;
private Socket socket;
ServerSocket server;
private int clientNumber;
public MultiTalkServerThread(ServerSocket server,Socket socket, int clientNumber)
{
this.server = server;
this.socket = socket;
this.clientNumber = clientNumber;
}
public void run()
{
try {
out = new PrintWriter(socket.getOutputStream(), true);
in = new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} //auto flush

sinbye = false;  
inbye = false;  
 f=new Frame("qq server boss Test");  
 f.setSize(280,250);  
 f.setLayout(new FlowLayout(FlowLayout.CENTER));  
 send=new TextField(80);  
 receive=new TextArea(30,80);  
 f.add(send);  
 f.add(receive);  
sending = new Button("发送");  
receiveing= new Button("关闭");  
f.add(sending);  
f.add(receiveing);  
sending.addActionListener(this);  
receiveing.addActionListener(this);  
 f.addWindowListener(new WindowAdapter(){  
     public void windowClosing(WindowEvent e){  
         System.exit(0);  
     }  
 });  
 f.setBackground(Color.lightGray);  
 f.setVisible(true);  
 record="";  

try {
    inputLine = in.readLine();
} catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}  
if(inputLine.equals("Bye."))  
    inbye=true;  
record=record+"from Client: "+inputLine+"\n";  
receive.setText(record);  
if(inbye){  
    sinbye=true;  
    out.println("Bye.");  
    out.flush();  
}  
else  
    send.setText("Server input:");  

    while( true )  
{  

    if( inbye == false )  
    {  
        try {
            inputLine = in.readLine();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }  
        record=record+"from Client: "+inputLine+"\n";  
        receive.setText(record);  
        if (inputLine.equals("Bye."))  
            inbye = true;  
    }  

    if( sinbye == false )  
    {  

        if(inbye){  
            out.println("Bye.");  
            out.flush();  
            sinbye=true;  
        }  
        else  
            send.setText("Server input:");  
    }  

    if( sinbye == true && inbye == true )  
        break;  
    }  
    out.close();  
    try {
        in.close();
        socket.close();  
        server.close();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }  
}
public void actionPerformed(ActionEvent e){  
    if(e.getSource()==sending){  
    if( sinbye == false )  
    {  
        sinputLine=send.getText();  
        sinputLine=sinputLine.replace("Server input:","");  
        out.println(sinputLine);  
        out.flush();  

        if (sinputLine.equals("Bye."))  
            sinbye = true;  
    }  
    }  
    else if(e.getSource()==receiveing){  

        System.exit(0);  
    }  

}  

}

客户端

import java.io.*;  
import java.net.*;  
import java.awt.*;  
import java.awt.event.*;  
import java.util.*;  

public class SingleTalkClient implements ActionListener  
{  
    private Frame f;  
   private Button sending,receiveing;  
    private TextField send;  
    private TextArea receive;  
    private PrintWriter out;  
    private BufferedReader in;  
    private BufferedReader stdIn;  
    private String fromServer, fromUser;  
    private String record;  
    boolean sbye,ubye;  
    public void actionPerformed(ActionEvent e){  
       if(e.getSource()==sending){  
           if(ubye==false){  
           fromUser=send.getText();  
           fromUser=fromUser.replace("Client input:","");  
           out.println(fromUser);  
           out.flush();  
           if (fromUser.equals("Bye."))  
                ubye = true;  
           }  
       }  
       else if(e.getSource()==receiveing){  
            System.exit(0);  
       }  
    }  
    public void handle() throws IOException {   
        Socket client = null;  
        out = null;  
        in = null;  

        try {  
            client = new Socket("127.0.0.1", 4444);  
            out = new PrintWriter(client.getOutputStream(), true); //auto flush  
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));  
        } catch (UnknownHostException e) {  
            System.err.println("Don't know about host: 127.0.0.1.");  
            System.exit(1);  
        } catch (IOException e) {  
            System.err.println("Couldn't get I/O for the connection to: 127.0.0.1.");  
            System.exit(1);  
        }  
    //创建图形界面  
        f=new Frame("qq clinet boss Test");  
        f.setSize(280,250);  
        f.setLayout(new FlowLayout(FlowLayout.CENTER));  
        send=new TextField(80);  
        receive=new TextArea(30,80);  
        f.add(send);  
        f.add(receive);  
        sending = new Button("发送");  
        receiveing= new Button("关闭");  
        f.add(sending);  
        f.add(receiveing);  
        sending.addActionListener(this);  
        receiveing.addActionListener(this);  
        f.addWindowListener(new WindowAdapter(){  
        public void windowClosing(WindowEvent e){  
            System.exit(0);  
         }  
        });  
        f.setBackground(Color.lightGray);  
        f.setVisible(true);  
        record="";  
    send.setText("Client input:");  
    sbye = false;  
    ubye = false;  
        while( true )    
    {  
        if( sbye == false )  
        {  
            fromServer = in.readLine();  
            record=record+"from Server: "+fromServer+"\n";  
            receive.setText(record);  
            if (fromServer.equals("Bye."))  
                sbye = true;  
        }  

        if( ubye == false )  
        {  
            if(sbye){  
                out.println("Bye.");  
                out.flush();  
                ubye=true;  
            }  
            else  
                send.setText("Client input:");  
        }  

        if( ubye == true && sbye == true )  
            break;  
     }  

        out.close();  
        in.close();  
        client.close();  
    }  

public static void main(String[] args) throws IOException {  
    new SingleTalkClient().handle();  
}  
}  

怎么说呢,这个如果在客户端加一个线程就不仅仅实现一对多的想法,就可以真正意义实现“群聊”的想法;但是由于没有数据库,那么真正意义群聊还是差点火候,但是模式是对的。学习不能只学习,还得思考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值