簡単なJavaソケットプログラムの作成方法

このQ&Aのポイント
  • Javaソケットプログラムを使って、get_balance、do_deposit、do_withdrawなどの機能を実装する方法をまとめます。
  • 具体的なプログラム例を紹介しながら、クライアントとサーバー間での通信やコマンドの解析方法について解説します。
  • また、初めてJavaを勉強する方に向けて、簡単なプログラムの作成手順やエラーのヒントを提供します。
回答を見る
  • ベストアンサー

簡単なjava socket program

get_balance account_num -> account_num balance example -> (client : get_balance 10) (server : 10 0) do_deposit account_num money-> account_num balance+money example -> (client : do_depoist 10 500) (server : 10 500) do_withdraw account_num money-> account_num balance-money expmple -> (client : do_withdraw 10 200) (server : 10 300) こんなことが出来るようにcordingしたいんです 今年の夏で初めてjavaを勉強したのでよく知りません どうしたらいいんですか? split()を使って String msg = in.readLine() String mss[] = msg.split() こんな感じでやろうとしましたが全然出来ませんでした ぜひhintを

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

題意と内容がよく分からないので的外れかもしれませんが。 単純にPC間で通信を行うのであればRMIを使うのがよいと思います。 ただ、String.splitとの関係がよく分かりません。一般的な言葉で的確な質問をお願いします。

関連するQ&A

  • c++ クラスに関してです。

    うまくクラス同士を連動させることができなくてエラーが出てしまいます。 どこが間違えているのかアドバイスくださると助かります。 #ifndef H22_H_ #define H22_H_ #include <string> #include "account.h" class Bank { public: Bank(); void deposit(double amount, const std::string& accountType); void withdraw(double amount, const std::string& accountType); void transfer(double amount, const std::string& accountType); double getBalance() const; double getSavingsBalance() const; double getCheckingBalance() const; private: Account checking, savings; }; #endif #ifndef ACCOUNT_H #define ACCOUNT_H #include <string> #include "account.h" class Account{ public: Account(); Account(double &amout); double deposit(double amount); double getBalance() const; double withdraw(double amount); double balance; private: }; #endif #include <iostream> #include "acount.h" using namespace std; Account::Account { balance = 0; } Account::Account(double amount) { balance = amount; } Account::double deposit() const { return balance; } Account::double getBalance(double balance) { balance += amount; return balance; } Account::double withdraw(double amount) { if(amount > balance) { balance -= 5; return balance; } elese { balance -= amount; return balance; }} h22.h の中身 #include <string> #include "h22.h" #include "account.h" #include <stdexcept> using namespace std; Bank::Bank() { Account checking; Account saving; } void Bank::deposit(double amount, const string& accountType) { if (accountType != "S" && accountType != "C") throw invalid_argument("Does not compute"); else if(accountType == "S") savings.balance += amount; else if(accountType == "C") checking.balance += amount; } void Bank::withdraw(double amount, const string& accountType) { if (accountType != "S" && accountType != "C") throw invalid_argument("Does not compute"); else if(accountType == "S") savings.balance -= amount; else if(accountType == "C") checking.balance -= amount; } void Bank::transfer(double amount, const string& accountType) { if (accountType != "S" && accountType != "C") { throw invalid_argument("Does not compute");} else if(accountType == "S") { savings.balance += checking.balance; savings.balance = 0;} else if(accountType == "C") { checking.balance += amount; checking.balance = 0;} } double Bank::getBalance() const { return getBalance(); } double Bank::getSavingsBalance() const { return savings.getBalance(); } double Bank::getCheckingBalance() const { return checking.getBalance(); } メイン.cpp http://pastebin.com/rQTj8xciです。 なにかヒントやアドバイスお願いします

  • TCP/IP Soket 通信

    本当に泣きそうです。教えてください。 サーバには   str_len=read(clnt_sock,msg_num,sizeof(msg_num));   msg_num[str_len]=\'\\0\';   printf(\"%s \\n\",msg_num);   str_len=read(clnt_sockt,msg_file,sizeof(msg_file));   msg_file[str_len]=\'\\0\';   printf(\"%s \\n,msg_file\"); クライアントには   write(sock,msg_num,sizeof(msg_num));   write(sock,msg_file,sizeof(msg_file)); になっていますが、お互いに実行させると、 サーバ側に「msg_num」は出力しますが、 「msg_file」は出力されず、待機状態になるのです。 どうすればいいのでしょうか?

  • iアプリのjavaでsplitは使えないのですか?

    iアプリの開発をしています。 サーバーから取得した文字列を split を使って String の配列にしようと思ったのですが、 JDK1.5 compile... C:\iDKDoJa5.0\apps\msho\src\mshoCanvas.java:336: シンボルを解決できません。 シンボル: メソッド split (java.lang.String) 場所 : java.lang.String の クラス msg = error_msg.split("\n"); エラー 1 個 javacの実行に失敗しました となってコンパイルエラーになります。どうも、splitが存在しないようなのですがそいう仕様なのでしょうか? 代わりのメソッドはindexOf()とsubstring()を使って簡単に作れそうではありますが、用意されているのならわざわざ作るのはバカバカしいので(作るのがバカバカしいのではなく、サイズが増えるのが)質問しました。

    • ベストアンサー
    • Java
  • WindowsアプリにPOSTのパラメータを渡す

    WebフォームからPOSTメソッドで送信したパラメータを、.NETのスマートクライアントに引き渡す方法を考えています。 ノータッチデプロイメントのスマートクライアントはどうやらクエリストリングを受け取ることはできるようですがPOSTが受け取れません。 現在試しているのはいったん、クエリストリングをASP.NETで受け取り、クエリストリングに変換してスマートクラインアントのページに転送するやりかたです。 この転送をサーバ内で処理しようとする(つまりServer.Transferを用いる)とブラウザはダウンロードされるのが.exeだとは気づかすテキストとして扱ってしまいます。Response.Ridirectを用いるとうまくいくのですが、これは結局クライアントがGETメソッドを投げてしまうので、できれば避けたい状況です。 なにかいい方法はないでしょうか?

  • Winsockで1460Byte以降のデータが細切れに

    度々お世話になってます。 VB6.0、Winsockで、チャットプログラムを作っているのですが・・・ 20文字のヘッダーで、処理が識別されるプログラムを作っているんですが、1460バイトを超えるデータが途中で切れて、ヘッダー無しの状態になって、処理を識別できないんですが・・・。 1460という数字は、DataArrivalのbytesTotalで調べたのですが、制御コード(のバイト数)とか、決まっているのでしょうか? Send メソッドで通信する場合、一度に送るサイズを1460バイトにしたいのですが、サーバ←→クライアント間で、自力で作るしかないですかね・・・? データを分割して、配列 myArray(partNum) にする。 先ほどと同じ処理のACKをクライアントが受信したら、partNumを+1して、データを送信。 client.SendData <処理A> 1:○○ server.GetData <A> 1:○○ server.SendData <A> 1:ACK client.SendData <A> 2:●● ・ ・ ・ client.SendData <A> 9999:End 方向性はあってますかね? なにか、楽な方法ありませんか?(汗) cf. http://bbs.wince.ne.jp/ch1/mqbbs.cgi?MODE=MSG&NUM=5156&FILE=bbs.log.51 http://bbs.wince.ne.jp/ch1/mqbbs.cgi?&FILE=bbs.log.51&MODE=MSG&NUM=5161

  • DB2 Ver7.1 のFIXをインストール時にエラーがでる

    現在、クライアントVer8.1 サーバVer7.1で接続したいために サーバのFix13にしようとFix3をインストールを行ったのですがエラーが出します。 どなたか原因等がわかれば教えてもらえないでしょうか? サーバ OS:Window2000 AdvanceServer DB2:Ver7.1 Fixはあててません エラー内容:「MSG_UNINSTALL_REQUIRED - entry not found in the string table」

  • 送信が出来ません

    Outlookメッセージにて、’デフォルトのメールクライアントが設定されていないか、現在のメールクライアントがメールを受け取れない状態にあります Outlookを起動してデフォルトのメールクライアントに指定してください’と出ます、その前のMSGは’POP3サーバーがXX秒応答ありません ・・・・’が出ます、メールアカウント、サーバーの設定もし直しましたが、駄目でした、但し、WINDOWS、Outlookの再立ち上げ時の1回目のみ送信が出来ます、Internet Sec2005にインストール後の現象です よろしくお願いします。

  • sambaとWindowsXPのマルチアカウント

     現在、サーバーはVineLinux2.6r4、samba2.0.1、(最新apt-get済)クライアントはWindowsXP Pro(SP2)で順調に動作しております。  このたび新しくWindowsXP Pro(SP2)をクライアントに追加しようと思っております。  このクライアントは複数のユーザーで使用するためアカウントを「管理者(adminアカウント)」「山田(制限付きアカウント)」「鈴木(制限付きアカウント)」の様に分けております。  このそれぞれのアカウント毎にsambaの各「home」ディレクトリと共有の「public」ディレクトリにアクセス出来るよう設定したいのですが、どのように設定したらよいでしょうか。  現状では設定したグループ「workgroup」内のsambaサーバー内の「public」ディレクトリのみが見ることが出来る状況です。よろしくお願いいたします。

  • BASP21を使ってEXCELからメールの送信

    BASP21を使ってEXCELからメールの送信をしたいのですが、できません。 自分なりに調べた結果、下記のコードになったのですが、どこかおかしいのでしょうか? エラー表示は次になります。 530 5.7.1 client was not authenticated from メールアドレス よろしくお願いいたします。 Sub ボタン2_Click() ''[送信]ボタン Dim bobj, msg As String, i As Long Dim Server As String, Mailto As String, MailFrom As String Dim Subject As String, Attach As String, Body As String On Error Resume Next Set bobj = CreateObject("basp21") ''BASP21オブジェクト ''BASP21がインストールされているかどうかを判定する If Err = 429 Then MsgBox "BASP21がインストールされていません。", vbCritical Exit Sub End If ''必須データのチェック Server = "mail.○○○.com:587:60" ''SMTPサーバー Mailto = "○○○@hotmail.co.jp" ''宛先 MailFrom = "△△△@×××.co.jp" ''差出し人 Subject = "更新連絡" ''タイトル Body = "システムが更新しました" ''本文 msg = bobj.SendMail(Server, Mailto, MailFrom, Subject, Body, Attach) Set bobj = Nothing If msg <> "" Then MsgBox msg, vbExclamation Else MsgBox "メールを送信しました。", vbInformation End If End Sub

  • WebSocket通信

    サーバー側 require 'em-websocket' EventMachine.run { EventMachine::WebSocket.start( :host => "0.0.0.0", :port => 6666, :secure => false) do |ws| begin ws.onmessage do |msg| p "Received:" p "->#{msg}" ws.send("alert(1);") end rescue Exception => e print_error "WebSocket error: #{e}" end end } クライアント側のコード var socket = new WebSocket("ws://zeno.pb.online:8085/"); socket.onopen = function(){ console.log("Socket open."); socket.send("Server, send me commands."); } socket.onmessage = function(msg){ eval(msg.data); // msg is coming from the attacker server, so it's trusted console.log("Command received and executed."); } about:configで security.csp.enable network.websocket.allowInsecureFromHTTPS これらを無効にして、やってみたのですが、どうにもうまくいかず wss://〇〇〇〇〇〇:8085/ のサーバーへの接続を確立できませんでした。 と出るのですが原因が解りません。 宜しくお願いします。 因みにfirefox developer editionsを使っています。

専門家に質問してみよう