sykwer / cli_chat Goto Github PK
View Code? Open in Web Editor NEWOn-job training of group programming. Lesson in University of Tokyo.
On-job training of group programming. Lesson in University of Tokyo.
//ChatClient.java
//チャットクライアントサンプルプログラム
//チャットサーバーが動いているコンピュータに対して
//接続を行う。
//コマンドラインパラメータとして接続先アドレスとポート番号を
//指定する。
class ChatClient {
public static void main(String[] args) {
try {
InetSocketAddress socketAddress =
new InetSocketAddress(args[0], Integer.parseInt(args[1]));
Socket socket = new Socket();
socket.connect(socketAddress, 10000);
InetAddress inetadrs;
if ((inetadrs = socket.getInetAddress()) != null) {
System.out.println("接続先: " + inetadrs);
} else {
System.out.println("接続失敗");
return;
}
//送信するメッセージは以下の行に記述されているもの。
String message = "チャット接続送信テスト。";
PrintWriter writer = new PrintWriter(socket.getOutputStream());
System.out.println("送信メッセージ: " + message);
writer.println(message);
writer.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//ChatServer.java
//チャットサーバープログラム
//チャットクライアントプログラムからの接続を待つ。
//接続後は1行の文字列読み取りを行い、接続終了する。
class ChatServer {
public static void main(String[] args) {
try {
// サーバーソケット作成
//起動時パラメータからポートを読み取り、
//そのポートで接続要求を待つ
//ServerSocketクラスはクライアントからの接続を待ち、
//srvSock.accept();によって接続したSocketオブジェクト
//を返す。
//その後の通信には、このSocketオブジェクトを使用する。
System.out.println(InetAddress.getLocalHost().getHostAddress());
int port = Integer.parseInt(args[0]);
ServerSocket srvSock = new ServerSocket(port);
// 接続待機。接続完了後、次行命令に移る。
Socket socket = srvSock.accept();
//接続先アドレスを表示
System.out.println("接続先: " + socket.getInetAddress());
//通信処理
//ソケットの入力ストリームから文字列を1行読み取る。
BufferedReader reader = new BufferedReader
(new InputStreamReader(socket.getInputStream()));
String line = reader.readLine();
//読み取った文字列を表示
System.out.println("受信メッセージ:" + line);
//終了処理 このプログラムは1行読み取ったら終了する。
//通信を続けるのであれば、reader.readLine();を
//ループするが、終了コマンドをチェックする等の処理を
//記述する。
reader.close();
socket.close();
srvSock.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
list
でもわかるsend hogehoge n times
とか送るとn回送られるsend message to username
でダイレクトメッセージを送れるfire
炎が100個送られるsushi
寿司がいっぱい送られるusername[time]: message
以下は #1 からのコピペ
chatlogin -to <ipaddress:port> -as <username>
コマンドで, クライアントはホストとのsocket通信を確立する. 現在のスレッドでは, stdinで入力を待つようにし, 別スレッドでsocketからのinputstreamを待ち, stdoutに出力するようにする.
login <username>
という書式で, socketのoutputstreamに書き込む.send <message>
(他の人にメッセージをブロードキャストする)logout
(streamへの書き込みをしたのち, socket通信を終了する)No matter where server is running, server process should be able to get the ip address that connects to wifi network.
import java.util.*;
import java.net.*;
import java.io.*;
public class NetworkListing {
public static void main(String[] args) throws SocketException, IOException {
Enumeration netItfs = NetworkInterface.getNetworkInterfaces();
if (netItfs == null) {
return;
}
while (netItfs.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface)netItfs.nextElement();
if (ni.isLoopback() || !ni.isUp() || ni.isPointToPoint() || ni.isVirtual()) {
continue;
}
System.out.println("-------------------------------");
System.out.println(ni.getDisplayName());
Enumeration<InetAddress> addrs = ni.getInetAddresses();
while (addrs.hasMoreElements()) {
InetAddress addr = addrs.nextElement();
if (addr instanceof Inet6Address || !addr.isReachable(1000)) {
continue;
}
System.out.println("--------");
System.out.println(addr.isSiteLocalAddress());
System.out.println(addr.getHostAddress());
}
}
}
}
Skelton
public class ChatServer {
private static ChatServer app;
public static ChatServer getApp() {
if (app == null) {
app = new ChatServer();
return app;
}
return this.app;
}
private ArrayList<ClientServant> clientServants;
private ServerSocket serverSocket;
private void ChatServer();
public void start() {
this.serverSocket = new ServerSocket(port);
while (!this.serverSocket.isClosed()) {
Socket clientSocket = this.serverSocket.accept();
ClientServant cs = new ClientServant(clientSocket);
this.clientServants.add(cs);
cs.start();
}
}
public static void main(String[] args) {
ChatServer.getApp().start();
}
}
class ClientServant extends Thread {
private Socket clientSocket;
private String username;
private ChatServer server = ChatServer.getApp();
public void ClientServant(Socket socket) {
this.clientSocket = socket;
}
public void run() {
InputStream is = this.clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
while (!this.clientSocket.isClosed()) {
String[] msg = reader.readLine().split(" ", 2);
handleCommand(msg[0], msg[1]);
}
}
private void handleCommand(String cmd, String value) {
// call sendMsg() or logout() or login()
}
private void broadcastMsg(String username, String msg) {
}
private void logout();
private void login(String username);
// ------------------------------------------------------
private void sendString(String str) {
try {
OutputStream os = this.clientSocket.getOutputStream();
// TODO: write to output stream
} catch (Exception err) {
}
}
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.