Jump to content
View in the app

A better way to browse. Learn more.

OSBot :: 2007 OSRS Botting

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Chatroom help! [java]

Featured Replies

So pretty much my client is not receiving the text that that was sent to the server, been stuck at this for a few hours now if you can help that would be awesome thanks! 

 

 

Client.java

import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

/**
 * 
 * @author reid dacosta
 *
 */
public class Client implements Runnable {

	private JPanel contentPane;
	private boolean running = false;
	private JFrame frame;
	private JTextArea messageArea;
	private JTextArea sendMessageArea;
	private JScrollPane scrollPane;
	private JScrollPane scrollPane_1;
	private JScrollPane scrollPane_2;
	private static String userName;

	private static DatagramSocket socket;
	private static InetAddress ip;

	private Thread send,listen;

	public static void main(String[] args) throws IOException {
		userName = JOptionPane.showInputDialog("Please enter your name!");
		new Client();
	}
	
	public void run() {
		listen();
	}

	public Client() {
		frame = new JFrame();
		frame.setTitle("rChat - [1.01 BETA]");
		frame.setResizable(false);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(100, 100, 478, 340);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		frame.setContentPane(contentPane);
		contentPane.setLayout(null);

		scrollPane = new JScrollPane();
		scrollPane.setBounds(6, 6, 322, 223);
		contentPane.add(scrollPane);

		scrollPane_1 = new JScrollPane();
		scrollPane_1.setBounds(334, 6, 138, 306);
		contentPane.add(scrollPane_1);

		scrollPane_2 = new JScrollPane();
		scrollPane_2.setBounds(6, 235, 322, 78);
		contentPane.add(scrollPane_2);

		messageArea = new JTextArea();
		scrollPane.setViewportView(messageArea);
		messageArea.setEditable(false);
		messageArea.setLineWrap(true);

		JTextArea onlineArea = new JTextArea();
		scrollPane_1.setViewportView(onlineArea);
		onlineArea.setEditable(false);

		sendMessageArea = new JTextArea();
		scrollPane_2.setViewportView(sendMessageArea);
		sendMessageArea.addKeyListener(new KeyListener() {
			@Override
			public void keyPressed(KeyEvent e) {
				if (e.getKeyCode() == KeyEvent.VK_ENTER) {
					e.consume();
					send(sendMessageArea.getText());
				}
			}

			@Override
			public void keyTyped(KeyEvent e) {
			}

			@Override
			public void keyReleased(KeyEvent e) {
			}
		});
		frame.setVisible(true);
		sendMessageArea.requestFocusInWindow();
		openConnection();
		running = true;
	}
	
	private void openConnection() {
		try {
			socket = new DatagramSocket();
			ip = InetAddress.getByName("localhost");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (SocketException e) {
			e.printStackTrace();
		}
	}

	private void send(String message) {
		//log(message);
		send(message.getBytes());
		sendMessageArea.setText("");
	}

	private void send(final byte[] data) {
		send = new Thread("Send") {
			public void run() {
				DatagramPacket packet = new DatagramPacket(data, data.length,ip, 1996);
				try {
					socket.send(packet);
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		};
		send.start();
	}
	
	public String receive() {
		byte[] data = new byte[1024];
		DatagramPacket packet = new DatagramPacket(data, data.length);
		try {
			socket.receive(packet);
		} catch (IOException e) {
			e.printStackTrace();
		}
		String message = new String(packet.getData());
		return message;
	}

	
	public void listen() {
		listen = new Thread("Listen") {
			public void run() {
				while (running) {
					String message = receive();
					System.out.println(message);
					log(message);
				}
			}
		};
		listen.start();
	}

	private void log(String str) {
		Date today = new Date();
		SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm:ss");
		String date = dateFormat.format(today);
		messageArea.append(String.format("(" + date + ") " + userName + ": " + str + "\n"));
	}
}

Server.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;
import javax.swing.text.DefaultCaret;

/**
 * 
 * @author reid dacosta
 *
 */
public class Server extends JFrame implements Runnable {

	private static final long serialVersionUID = 1L;

	private JPanel contentPane;
	private JTextArea textArea;
	
	private DatagramSocket socket;
	private static final int PORT = 1996;
	private boolean running = false;
	private Thread run, recive;

	public Server() {
		setTitle("rChat Server");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 200);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);

		JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(6, 6, 438, 166);
		contentPane.add(scrollPane);

		textArea = new JTextArea();
		textArea.setLineWrap(true);
		textArea.setEditable(false);
		scrollPane.setViewportView(textArea);
		DefaultCaret caret = (DefaultCaret)textArea.getCaret();
		caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

		setVisible(true);
		
		startServer();
	}

	public static void main(String[] args) {
		new Server();
	}

	@Override
	public void run() {
		running = true;
		recive();
	}

	private void startServer() {
		try {
			socket = new DatagramSocket(PORT);
		} catch (SocketException e) {
			e.printStackTrace();
		}
		run = new Thread(this, "Server");
		run.start();
	}

	private void recive() {
		recive = new Thread("Receive") {
			public void run() {
				while (running) {
					byte[] data = new byte[1024];
					DatagramPacket packet = new DatagramPacket(data,data.length);
					try {
						socket.receive(packet);
					} catch (IOException e) {
						e.printStackTrace();
					}
					String str = new String(packet.getData());
					log(str);
				}
			}
		};
		recive.start();
	}
	
	private void log(String str) {
		textArea.append("Someone said : " + str + "\n");
	}
	
}

Edited by Reid

Dafuq, why use Datagram? Just create a server socket on your specified port and respond to incoming requests. It's ridiculously easy to converge using sockets.

If you're going to be handling many requests then you could set up an executor service to spawn threads with a fixed thread pool.

Java recently added "New IO" which allow you to create easily scalable TCP based client/server applications using a selector. A selector allows you to handle many Sockets (SocketChannel in NIO) using a single thread. I don't recommend it, but with a NIO selector you can manage UDP channels as well.

I recommend looking into it

Edited by FrostBug

Guest
This topic is now closed to further replies.

Recently Browsing 0

  • No registered users viewing this page.

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.