fork download
  1. // サーバープログラム
  2.  
  3. import java.io.*;
  4. import java.util.*;
  5. import java.net.*;
  6.  
  7. class UserInfo {
  8. Socket sock;
  9. String name;
  10. };
  11.  
  12. public class ChatSv {
  13.  
  14. public static void main(String[] args) {
  15. ServerSocket ssock;
  16. Socket asock = null;
  17. int i, n = -1;
  18. byte[] buf = new byte[ChatParam.MSIZE], cbuf;
  19. UserInfo[] users = new UserInfo[ChatParam.MAX_USERS];
  20. boolean flag;
  21. String str;
  22.  
  23. for (i = 0; i < ChatParam.MAX_USERS; i++) {
  24. users[i] = new UserInfo();
  25. users[i].sock = null;
  26. };
  27.  
  28. try {
  29.  
  30. /* クライアントからの接続待ち準備 */
  31.  
  32. while (true) {
  33.  
  34. /* クライアントからの接続受け付け */
  35.  
  36. for (i = 0; i < ChatParam.MAX_USERS; i++) {
  37. if (users[i].sock == null) {
  38. // まだ最大人数に達していないので参加OK
  39. users[i].sock = asock;
  40. users[i].is = asock.getInputStream();
  41. users[i].os = asock.getOutputStream();
  42. break;
  43. }
  44. }
  45.  
  46. if (i < ChatParam.MAX_USERS) {
  47. /* 接続してきたクライアントに参加OKを伝える */
  48.  
  49. /* すでに参加しているクライアントに新しい参加者を伝える */
  50. buf[0] = ChatParam.JOIN;
  51. cbuf = (users[i].name + "さんが加わりました\0").getBytes();
  52. System.arraycopy(cbuf, 0, buf, 1, cbuf.length);
  53. }
  54. else {
  55. /* すでに最大人数に達しているので参加不可をクライアントに伝えて
  56. 切断処理を行う */
  57.  
  58. }
  59.  
  60. // 少なくともこれ以降のクライアントとの通信は並列に行う必要あり
  61. // (新たな参加者受け付けと参加済みのクライアントからのメッセージ
  62. // 受信は順序が決まっていないため)
  63.  
  64. /* ある参加者からメッセージが送信されてきたら、それ以外の参加者に
  65. そのメッセージを転送する */
  66.  
  67. /* 誰かが抜けた(接続が切れた)場合には他の参加者に抜けたことを伝える */
  68. buf[0] = ChatParam.LEAVE;
  69. cbuf = (users[n].name + "さんが抜けました\0").getBytes();
  70. System.arraycopy(cbuf, 0, buf, 1, cbuf.length);
  71. }
  72. } catch (Exception e) {
  73. System.out.println("error");
  74. System.exit(1);
  75. }
  76.  
  77. /* 通信終了処理(上が無限ループなので意味はないが) */
  78. }
  79. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
Main.java:14: error: class ChatSv is public, should be declared in a file named ChatSv.java
public class ChatSv {
       ^
Main.java:20: error: cannot find symbol
    byte[] buf = new byte[ChatParam.MSIZE], cbuf;
                          ^
  symbol:   variable ChatParam
  location: class ChatSv
Main.java:21: error: cannot find symbol
    UserInfo[] users = new UserInfo[ChatParam.MAX_USERS];
                                    ^
  symbol:   variable ChatParam
  location: class ChatSv
Main.java:25: error: cannot find symbol
    for (i = 0; i < ChatParam.MAX_USERS; i++) {
                    ^
  symbol:   variable ChatParam
  location: class ChatSv
Main.java:38: error: cannot find symbol
	for (i = 0; i < ChatParam.MAX_USERS; i++) {
	                ^
  symbol:   variable ChatParam
  location: class ChatSv
Main.java:48: error: cannot find symbol
	if (i < ChatParam.MAX_USERS) {
	        ^
  symbol:   variable ChatParam
  location: class ChatSv
Main.java:52: error: cannot find symbol
	    buf[0] = ChatParam.JOIN;
	             ^
  symbol:   variable ChatParam
  location: class ChatSv
Main.java:70: error: cannot find symbol
	buf[0] = ChatParam.LEAVE;
	         ^
  symbol:   variable ChatParam
  location: class ChatSv
8 errors
stdout
Standard output is empty