




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. TCP实现大小写转换代码如下import java.io.*;import .*;class TCPServer public static void main(String argv) throws Exception String ClientSentence; String capitalizedSentence; SuppressWarnings(resource)ServerSocket welcomeSocket = new ServerSocket(8998); while(true) Socket connectionSocket = welcomeSocket.accept(); BufferedReader infromClient = new BufferedReader(new InputStreamReader( connectionSocket.getInputStream(); DataOutputStream outToClient = new DataOutputStream( connectionSocket.getOutputStream(); ClientSentence = infromClient. readLine(); capitalizedSentence = ClientSentence.toUpperCase() + n; outToClient.writeBytes(capitalizedSentence); TCP服务器代码:import java.io.*;import .*;class TCPClient public static void main(String argv) throws Exception String sentence; String modifiedSentence; BufferedReader infromUser = new BufferedReader( new InputStreamReader(System.in); Socket clientSocket = new Socket(,8998); DataOutputStream outToServer = new DataOutputStream( clientSocket.getOutputStream(); BufferedReader infromServer = new BufferedReader(new InputStreamReader( clientSocket.getInputStream(); sentence = infromUser.readLine(); outToServer.writeBytes(sentence + n); modifiedSentence = infromServer.readLine(); System.out.println(FROM SERVER:+ modifiedSentence); clientSocket.close(); 运行结果截图:2. UDP实现大小写转换UDPServer短代码:import .*;import java.io.*;public class Server public static void main(String args)throws SocketException,IOExceptionDatagramSocket socket;DatagramPacket packet;byte buf = new byte256;int port;InetAddress add;socket = new DatagramSocket(8888);packet = new DatagramPacket(buf,buf.length);boolean b=true;while(b)socket.receive(packet);String s = new String(packet.getData().trim();System.out.println(服务器接受数据为:+s);/String str = s-(a-A);String str = s.toUpperCase();s=String.valueOf(str);buf = s.getBytes();packet=new DatagramPacket(buf,buf.length,packet.getAddress(),packet.getPort(); socket.send(packet);socket.close();UDP客户端代码:import .*;import java.io.*;public class Client public static void main(String args)throws SocketException,IOExceptionDatagramSocket socket = new DatagramSocket();byte buf = new byte256;BufferedReader b = new BufferedReader(new InputStreamReader(System.in);System.out.println(请输入字符串:);String str = b.readLine();char c=str.toCharArray();/String str = a;buf=String.valueOf(c).getBytes();DatagramPacket packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),8888);socket.send(packet);buf = new byte256;packet=new DatagramPacket(buf,buf.length);socket.receive(packet);String s=new String(packet.getData().trim();System.out.println(转换大写为:+s);socket.close();运行结果截图:3. SOCKET编程实现聊天程序服务器代码:package socket;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import java.io.*;import .BindException;import .ServerSocket;import .Socket;import java.util.ArrayList;import java.util.StringTokenizer;public class Server private JFrame frame;private JTextArea contentArea;private JTextField txt_message;private JTextField txt_max;private JTextField txt_port;private JButton btn_start;private JButton btn_stop;private JButton btn_send;private JPanel northPanel;private JPanel southPanel;private JScrollPane rightPanel;private JScrollPane leftPanel;private JSplitPane centerSplit;private JList userList;private DefaultListModel listModel;private ServerSocket serverSocket;private ServerThread serverThread;private ArrayList clients;private boolean isStart = false;/ 主方法,程序执行入口public static void main(String args) new Server();/ 执行消息发送public void send() if (!isStart) JOptionPane.showMessageDialog(frame, 服务器还未启动,不能发送消息!, 错误,JOptionPane.ERROR_MESSAGE);return;if (clients.size() = 0) JOptionPane.showMessageDialog(frame, 没有用户在线,不能发送消息!, 错误,JOptionPane.ERROR_MESSAGE);return;String message = txt_message.getText().trim();if (message = null | message.equals() JOptionPane.showMessageDialog(frame, 消息不能为空!, 错误,JOptionPane.ERROR_MESSAGE);return;sendServerMessage(message);/ 群发服务器消息contentArea.append(服务器说: + txt_message.getText() + n);txt_message.setText(null);/ 构造放法public Server() frame = new JFrame(服务器);/ 更改JFrame的图标:frame.setIconImage(Toolkit.getDefaultToolkit().createImage(Client.class.getResource(qq.png);contentArea = new JTextArea();contentArea.setEditable(false);contentArea.setForeground(Color.blue);txt_message = new JTextField();txt_max = new JTextField(30);txt_port = new JTextField(6999);btn_start = new JButton(启动);btn_stop = new JButton(停止);btn_send = new JButton(发送);btn_stop.setEnabled(false);listModel = new DefaultListModel();userList = new JList(listModel);southPanel = new JPanel(new BorderLayout();southPanel.setBorder(new TitledBorder(写消息);southPanel.add(txt_message, Center);southPanel.add(btn_send, East);leftPanel = new JScrollPane(userList);leftPanel.setBorder(new TitledBorder(在线用户);rightPanel = new JScrollPane(contentArea);rightPanel.setBorder(new TitledBorder(消息显示区);centerSplit = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, leftPanel,rightPanel);centerSplit.setDividerLocation(100);northPanel = new JPanel();northPanel.setLayout(new GridLayout(1, 6);northPanel.add(new JLabel(人数上限);northPanel.add(txt_max);northPanel.add(new JLabel(端口);northPanel.add(txt_port);northPanel.add(btn_start);northPanel.add(btn_stop);northPanel.setBorder(new TitledBorder(配置信息);frame.setLayout(new BorderLayout();frame.add(northPanel, North);frame.add(centerSplit, Center);frame.add(southPanel, South);frame.setSize(600, 400);int screen_width = Toolkit.getDefaultToolkit().getScreenSize().width;int screen_height = Toolkit.getDefaultToolkit().getScreenSize().height;frame.setLocation(screen_width - frame.getWidth() / 2,(screen_height - frame.getHeight() / 2);frame.setVisible(true);/ 关闭窗口时事件frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) if (isStart) closeServer();/ 关闭服务器System.exit(0);/ 退出程序);/ 文本框按回车键时事件txt_message.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) send(););/ 单击发送按钮时事件btn_send.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) send(););/ 单击启动服务器按钮时事件btn_start.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (isStart) JOptionPane.showMessageDialog(frame, 服务器已处于启动状态,不要重复启动!,错误, JOptionPane.ERROR_MESSAGE);return;int max;int port;try try max = Integer.parseInt(txt_max.getText(); catch (Exception e1) throw new Exception(人数上限为正整数!);if (max = 0) throw new Exception(人数上限为正整数!);try port = Integer.parseInt(txt_port.getText(); catch (Exception e1) throw new Exception(端口号为正整数!);if (port = 0) throw new Exception(端口号 为正整数!);serverStart(max, port);contentArea.append(服务器已成功启动!人数上限: + max + ,端口: + port+ n);JOptionPane.showMessageDialog(frame, 服务器成功启动!);btn_start.setEnabled(false);txt_max.setEnabled(false);txt_port.setEnabled(false);btn_stop.setEnabled(true); catch (Exception exc) JOptionPane.showMessageDialog(frame, exc.getMessage(),错误, JOptionPane.ERROR_MESSAGE););/ 单击停止服务器按钮时事件btn_stop.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) if (!isStart) JOptionPane.showMessageDialog(frame, 服务器还未启动,无需停止!, 错误,JOptionPane.ERROR_MESSAGE);return;try closeServer();btn_start.setEnabled(true);txt_max.setEnabled(true);txt_port.setEnabled(true);btn_stop.setEnabled(false);contentArea.append(服务器成功停止!n);JOptionPane.showMessageDialog(frame, 服务器成功停止!); catch (Exception exc) JOptionPane.showMessageDialog(frame, 停止服务器发生异常!, 错误,JOptionPane.ERROR_MESSAGE););/ 启动服务器public void serverStart(int max, int port) throws .BindException try clients = new ArrayList();serverSocket = new ServerSocket(port);serverThread = new ServerThread(serverSocket, max);serverThread.start();isStart = true; catch (BindException e) isStart = false;throw new BindException(端口号已被占用,请换一个!); catch (Exception e1) e1.printStackTrace();isStart = false;throw new BindException(启动服务器异常!);/ 关闭服务器SuppressWarnings(deprecation)public void closeServer() try if (serverThread != null)serverThread.stop();/ 停止服务器线程for (int i = clients.size() - 1; i = 0; i-) / 给所有在线用户发送关闭命令clients.get(i).getWriter().println(CLOSE);clients.get(i).getWriter().flush();/ 释放资源clients.get(i).stop();/ 停止此条为客户端服务的线程clients.get(i).reader.close();clients.get(i).writer.close();clients.get(i).socket.close();clients.remove(i);if (serverSocket != null) serverSocket.close();/ 关闭服务器端连接listModel.removeAllElements();/ 清空用户列表isStart = false; catch (IOException e) e.printStackTrace();isStart = true;/ 群发服务器消息public void sendServerMessage(String message) for (int i = clients.size() - 1; i = 0; i-) clients.get(i).getWriter().println(服务器: + message + (多人发送);clients.get(i).getWriter().flush();/ 服务器线程class ServerThread extends Thread private ServerSocket serverSocket;private int max;/ 人数上限/ 服务器线程的构造方法public ServerThread(ServerSocket serverSocket, int max) this.serverSocket = serverSocket;this.max = max;public void run() while (true) / 不停的等待客户端的链接try Socket socket = serverSocket.accept();if (clients.size() = max) / 如果已达人数上限BufferedReader r = new BufferedReader(new InputStreamReader(socket.getInputStream();PrintWriter w = new PrintWriter(socket.getOutputStream();/ 接收客户端的基本用户信息String inf = r.readLine();StringTokenizer st = new StringTokenizer(inf, );User user = new User(st.nextToken(), st.nextToken();/ 反馈连接成功信息w.println(MAX服务器:对不起, + user.getName()+ user.getIp() + ,服务器在线人数已达上限,请稍后尝试连接!);w.flush();/ 释放资源r.close();w.close();socket.close();continue;ClientThread client = new ClientThread(socket);client.start();/ 开启对此客户端服务的线程clients.add(client);listModel.addElement(client.getUser().getName();/ 更新在线列表contentArea.append(client.getUser().getName()+ client.getUser().getIp() + 上线!n); catch (IOException e) e.printStackTrace();/ 为一个客户端服务的线程class ClientThread extends Thread private Socket socket;private BufferedReader reader;private PrintWriter writer;private User user;public BufferedReader getReader() return reader;public PrintWriter getWriter() return writer;public User getUser() return user;/ 客户端线程的构造方法public ClientThread(Socket socket) try this.socket = socket;reader = new BufferedReader(new InputStreamReader(socket.getInputStream();writer = new PrintWriter(socket.getOutputStream();/ 接收客户端的基本用户信息String inf = reader.readLine();StringTokenizer st = new StringTokenizer(inf, );user = new User(st.nextToken(), st.nextToken();/ 反馈连接成功信息writer.println(user.getName() + user.getIp() + 与服务器连接成功!);writer.flush();/ 反馈当前在线用户信息if (clients.size() 0) String temp = ;for (int i = clients.size() - 1; i = 0; i-) temp += (clients.get(i).getUser().getName() + / + clients.get(i).getUser().getIp()+ ;writer.println(USERLIST + clients.size() + + temp);writer.flush();/ 向所有在线用户发送该用户上线命令for (int i = clients.size() - 1; i = 0; i-) clients.get(i).getWriter().println(ADD + user.getName() + user.getIp();clients.get(i).getWriter().flush(); catch (IOException e) e.printStackTrace();SuppressWarnings(deprecation)public void run() / 不断接收客户端的消息,进行处理。String message = null;while (true) try message = reader.readLine();/ 接收客户端消息if (message.equals(CLOSE)/ 下线命令contentArea.append(this.getUser().getName()+ this.getUser().getIp() + 下线!n);/ 断开连接释放资源reader.close();writer.close();socket.close();/ 向所有在线用户发送该用户的下线命令for (int i = clients.size() - 1; i = 0; i-) clients.get(i).getWriter().println(DELETE + user.getName();clients.get(i).getWriter().flush();listModel.removeElement(user.getName();/ 更新在线列表/ 删除此条客户端服务线程for (int i = clients.size() - 1; i = 0; i-) if (clients.get(i).getUser() = user) ClientThread temp = clients.get(i);clients.remove(i);/ 删除此用户的服务线程temp.stop();/ 停止这条服务线程return; else dispatcherMessage(message);/ 转发消息 catch (IOException e) e.printStackTrace();/ 转发消息public void dispatcherMessage(String message) StringTokenizer stringTokenizer = new StringTokenizer(message, );String source = stringTokenizer.nextToken();String owner = stringTokenizer.nextToken();String content = stringTokenizer.nextToken();message = source + 说: + content;contentArea.append(message + n);if (owner.equals(ALL) / 群发for (int i = clients.size() - 1; i = 0; i-) clients.get(i).getWriter().println(message + (多人发送);clients.get(i).getWriter().flush();客户端代码:package socket;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.TitledBorder;import java.io.*;import .Socket;import java.util.HashMap;import java.util.Map;import java.util.StringTokenizer;public class Client private JFrame frame;private JList userList;private JTextArea textArea;private JTextField textField;private JTextField txt_port;private JTextField txt_hostIp;private JTextField txt_name;private JButton btn_start;private JButton btn_stop;private JButton btn_send;private JPanel northPanel;private JPanel southPanel;private JScrollPane rightScroll;private JScrollPane leftScroll;private JSplitPane centerSplit;private DefaultListModel listModel;private boolean isConnected = false;private Socket socket;private PrintWriter writer;private BufferedReader reader;private MessageThread messageThread;/ 负责接收消息的线程private Map onLineUsers = new HashMap();/ 所有在线用户/ 主方法,程序入口public static void main(String args) new Client();/ 执行发送public void send() if (!isConnected) JOptionPane.showMessageDialog(frame, 还没有连接服务器,无法发送消息!, 错误,JOptionPane.ERROR_MESSAGE);return;String message = textField.getText().trim();if (message = null | message.equals() JOptionPane.showMessageDialog(frame, 消息不能为空!, 错误,JOptionPane.ERROR_MESSAGE);return;sendMessage(frame.getTitle() + + ALL + + message);textField.setText(null);/ 构造方法public Client() textArea = new JTextArea();textArea.setEditable(false);textArea.setForeground(Color.blue);textField = new JTextField();txt_port = new JTextField(6999);txt_hostIp = new JTextField();txt_name = new JTextField(doudou);btn_start = new JButton(连接);btn_stop = new JButton(断开);btn_send = new JButton(发送);listModel = new DefaultListModel();userList = new JList(listModel);northPanel = new JPanel();northPanel.setLayout(new GridLayout(1, 7);northPanel.add(new JLabel(端口);northPanel.add(txt_port);northPanel.add(new JLabel(服务器IP);northPanel.add(txt_hostIp);northPanel.add(new JLabel(姓名);northPanel.add(txt_name);northPanel.add(btn_start);northPanel.add(btn_stop);northPanel.setBorder(new TitledBorder(连接信息);rightScroll = new JScrollPane(textArea);rightScroll.setBorder(new TitledBorder(消息显示区);leftScroll = new JScrollPane(userList);leftScroll.setBorder(new TitledBorder(在线
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高血压参考试题及答案
- 高水平考试题目及答案
- 2025年合肥星辰建材工程合同
- 老年人社交需求与景观设计的关联性探讨
- 集成电路制造实践教学环境与实验平台建设
- 2025商务服务合同范本型电子格式
- 数据驱动的曲面景观建筑结构设计与施工流程优化
- 教育资源与行业资源协同利用的策略
- 涤纶生产建设项目风险评估报告
- 2025茶叶陈列包量合同协议书范本
- 咖啡基础培训课件
- 人才服务合同书
- 2025年工会财务大赛理论题库(附答案)
- 2025-2026学年统编版八年级上册道德与法治教学计划含教学进度表
- 矿井顶板事故防治课件
- 2025年中国电力投资集团校园招聘笔试题型分析及备考策略
- 抗生素课件教学课件
- 销售法律知识培训
- 中国慢性胃炎诊治指南(2022年)解读
- 糖尿病低血糖症诊疗指南
- 直升机发动机油封课件
评论
0/150
提交评论