Java Socket基础[备忘]第一部分

1.服务端----Server.java

   

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

import javax.swing.*;

import java.io.*;

import java.net.*;

import java.awt.*;

import java.awt.event.*;

/**

 * Created by JXJ on 2017/6/26.

 */

public class Server extends JFrame{

 

    private JTextField userText;

    private JTextArea chatWindow;

    private ObjectOutputStream output;

    private ObjectInputStream input;

    private ServerSocket server;

    private Socket connection;

    //构造方法

    public Server(){

        super("即时聊天小程序");

        userText=new JTextField();

        userText.setEditable(false);

        userText.addActionListener(new ActionListener() {

            @Override

            public void actionPerformed(ActionEvent e) {

                sendMessage(e.getActionCommand());

                userText.setText("");

            }

        });

        add(userText,BorderLayout.NORTH);

        chatWindow=new JTextArea();

        add(new JScrollPane(chatWindow));

        setSize(300,150);

        setVisible(true);

 

    }

 

 

 

    //建立并启动服务

    public void startRununing(){

        try{

            server=new ServerSocket(6789,100);

            while(true){

                try{

                    //等待连接

                    waitForConnect();

                    //获取输入输出数据流

                    setupStreams();

                    //聊天

                    whileChatting();

                }catch (EOFException eofException){

                        showMessage("\n 连接已经结束!");

                }finally {

                    closeCrap();

                }

            }

        }catch (IOException ioException){

            ioException.printStackTrace();

        }

    }

 

 

 

    //等待连接,然后显示连接信息

    private void waitForConnect()  throws IOException{

        showMessage(" 等待客户端连接...\n");

        connection=server.accept();

        showMessage("客户端"+connection.getInetAddress().getHostName()+"已连接!\n ");

    }

 

    //获取输入输出流

    private void setupStreams() throws IOException{

        output=new ObjectOutputStream(connection.getOutputStream());

        //这个重点关注一下

        output.flush();

        input=new ObjectInputStream(connection.getInputStream());

        showMessage("\n数据流已建立!\n ");

    }

    //聊天信息处理

    private void whileChatting() throws IOException {

        String message="现在你已经连接上了!";

        sendMessage(message);

        ableToType(true);

        do{

            try{

                message=(String)input.readObject();

                showMessage(message+"\n ");

            }catch (ClassNotFoundException classNotFoundException){

                showMessage("用户发送信息转换异常!\n");

            }

        }while(!message.equals("client-end"));

 

    }

    //聊天结束后关闭输入输出流和socket

    private void closeCrap() {

        showMessage("正在关闭连接...\n");

        ableToType(false);

        try{

            //注意关闭先后顺序   输出流  输入流  socket

            output.close();

            input.close();

            connection.close();

        }catch (IOException ioException){

 

        }

    }

 

    //给客户端发送信息

    private void sendMessage(String message) {

        try{

            output.writeObject("Server"+message);

            output.flush();

            showMessage("Server"+message+"\n");

        }catch (IOException ioException){

            chatWindow.append("[错误] 我没有成功发送信息!");

        }

    }

    //在窗口上实时显示聊天信息

    private void showMessage(final String text) {

        //注意窗口更新信息的方式

        SwingUtilities.invokeLater(new Runnable() {

            @Override

            public void run() {

                chatWindow.append(text);

            }

        });

    }

    //让用户输入信息

    private void ableToType(final boolean tof) {

        //注意按钮的禁用与启用的方式

        SwingUtilities.invokeLater(new Runnable() {

            @Override

            public void run() {

                userText.setEditable(tof);

            }

        });

    }

}

http://music.migu.cn/v3/my/playlist/150900297

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值