SlideShare a Scribd company logo
2013

ネットワーク第 5 回
目
HTTP 通信/ソケット通信
1.

Socket 通信を行うプログラム
ソケット通信を利用したチャットクライアント(Android アプリ)とサーバプログラム
を作成します。今回は、サーバは自分の PC 内に起動させます。

※Android Virtual Device(AVD)の設定
Eclipse からエミュレータでデバッグを行うために、エミュレータの端末の設定を追加しま
す。
Eclipse のメニューから[ウインドウ]->[AVD Manager]を選択し、
[New]ボタンをクリック。
以下のように設定してください。

ソースコード(クライアント側)
Eclipse を開いて、パッケージエクスプローラーで右クリックし、[新規]->[Android プ
ロジェクト]を選択します。
プロジェクト名は
「SocketEx」
としてください。
Target SDK
と Compile With は Android4.0(IceCreamSandwich)を選びます。ActivityName は
「SocketEx」としましょう。
package com.example.socketex;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class SocketEx extends Activity implements View.OnClickListener{
private final static String BR = System.getProperty("line.separator");
private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
private final static int MP = LinearLayout.LayoutParams.MATCH_PARENT;
private static final String ADDRESS = "192.168.1.100"; ※変更すること!
private TextViewlblReceive;
private EditTexteditText;
private Button btnSend;
private Socket socket;
private InputStream in;
private OutputStream out;
private boolean error;
private final Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
LinearLayout layout = new LinearLayout(this);
layout.setBackgroundColor(Color.rgb(255,255,255));
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
editText = new EditText(this);
editText.setId(2);
editText.setText("", TextView.BufferType.NORMAL);
editText.setLayoutParams(new

LinearLayout.LayoutParams(MP,

WC));
layout.addView(editText);
btnSend = new Button(this);
btnSend.setText("送信");
btnSend.setOnClickListener(this);
btnSend.setLayoutParams(new

LinearLayout.LayoutParams(WC,

WC));
layout.addView(btnSend);
lblReceive = new TextView(this);
lblReceive.setId(1);
lblReceive.setText("");
lblReceive.setTextSize(16.0f);
lblReceive.setTextColor(Color.rgb(0, 0, 0));
lblReceive.setLayoutParams(new
WC));
layout.addView(lblReceive);

LinearLayout.LayoutParams(MP,
}
@Override
public void onStart() {
super.onStart();
Thread thread = new Thread() {
public void run() {
try {
connect(ADDRESS, 8080);
} catch (Exception e) {
}
}
};
thread.start();
}
@Override
public void onStop() {
super.onStop();
disconnect();
}
private void addText(final String text) {
handler.post(new Runnable() {
@Override
public void run() {
lblReceive.setText(text + BR + lblReceive.getText());
}
});
}
private void connect(String address, int port) {
int size;
String str;
byte[] w = new byte[1024];
try {
addText("接続中");
socket = new Socket(address, port);
in = socket.getInputStream();
out = socket.getOutputStream();
addText("接続完了");
while(socket != null &&socket.isConnected()) {
size = in.read(w);
if (size <= 0) {
continue;
}
str = new String(w, 0, size, "UTF-8");
addText(str);
}
} catch (Exception e) {
addText("通信に失敗しました。");
}
}
private void disconnect() {
try {
socket.close();
socket = null;
} catch (Exception e) {
}
}
@Override
public void onClick(View v) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
error = false;
try {
if (socket != null &&socket.isConnected()) {
byte[]

w

=

editText.getText().toString().getBytes("UTF8");
out.write(w);
out.flush();
}
} catch (Exception e) {
error = true;
}
handler.post(new Runnable() {
public void run() {
if (error) {
addText(" 通 信 に 失 敗 し ま
した");
} else {
editText.setText("",
TextView.BufferType.NORMAL);
}
}
});
}
});
thread.start();
}
}
ソースコード(サーバ側)
Eclipse で新規 Java プロジェクト『chatserver』を作成します。作成したら、src フォルダ
の直下に、
『ChatServer.java』
『CharServerThread.java』2 つの java ファイルを作成しま
す。ソースコードはそれぞれ以下のように記述します。
○ChatServer.java
package com.example;
import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* This class launches the web application in an embedded Jetty container.
* This is the entry point to your application. The Java command that is used for
* launching should fire this main method.
*
*/
public class ChatServer {
public void start(int port) {
ServerSocket server;
Socket socket;
ChatServerThread thread;
try {
server = new ServerSocket(port);
System.err.println("ChatServer start" +
"¥nIP

Address:"

InetAddress.getLocalHost().getHostAddress()
+ "¥nPort:" + port);
while (true) {
try {
socket = server.accept();
thread = new ChatServerThread(socket);
thread.start();
} catch (IOException e) {
System.out.println(e);
}

+
}
} catch (IOException e) {
System.err.println(e);
}
}
public static void main(String[] args) throws Exception{
ChatServer server = new ChatServer();
server.start(8080);
}
}
○ChatServerThread.java
package com.example;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
public class ChatServerThread extends Thread {
private

static

List<ChatServerThread>

ArrayList<ChatServerThread>();
private Socket socket;
public ChatServerThread(Socket socket) {
super();
this.socket = socket;
threads.add(this);
}

threads

=

new
public void run() {
InputStream in = null;
String message;
int size;
byte[] w = new byte[10240];
try {
System.err.println("ChatServerThread start");
in = socket.getInputStream();
while(true) {
try {
size = in.read(w);
if (size <= 0) {
throw new IOException();
}
message = new String(w, 0, size, "UTF8");
System.out.println(message);
sendMessageAll(message);
} catch(IOException e) {
System.out.println("ChatServerThread
stop");
socket.close();
threads.remove(this);
return;
}
}
} catch (IOException e) {
System.err.println(e);
}
}
public void sendMessageAll(String message) {
for (ChatServerThread thread : threads) {
if (thread.isAlive()) {
thread.sendMessage(this, message);
}
}
System.out.println(message);
}
public void sendMessage(ChatServerThread talker, String message) {
try {
OutputStream out = socket.getOutputStream();
byte[] w = message.getBytes("UTF8");
out.write(w);
out.flush();
} catch (IOException e) {
}
}
}
ソースを記述したら、Java アプリケーションとして実行してください。
その後、Android アプリを起動します。
2.

HTTP 通信を行う Android アプリ

HTTP 通信の GET/POST メソッドを行ってネット上の情報を表示するアプリを作成します。
ソースコード
Eclipse を開いて、パッケージエクスプローラーで右クリックし、[新規]->[Android プロジ
ェクト]を選択します。
プロジェクト名は
「HttpEx」
としてください。
Target SDK と Compile
With は Android4.0(IceCreamSandwich)を選びます。ActivityName は「HttpEx」としま
しょう。
プロジェクトが作成出来たら、src.com.example.httpex フォルダの HttpEx.java ファイル
を以下のように編集してください。
また、AndroidManifest.xml を開き、
『Permission』タブの中の Add ボタンをクリックし
て、
『User Permission』を選択します。Name は『android.permission.INTERNET』を選
択してください。
package com.example.httpex;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
public class HttpEx extends Activity implements View.OnClickListener{
private static final int WC = LinearLayout.LayoutParams.WRAP_CONTENT;
private static final int MP = LinearLayout.LayoutParams.MATCH_PARENT;
private EditTexteditText;
// リクエスト先の URL
private static final String URL = "http://httpserverex.herokuapp.com/hello";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
// レイアウトの生成
LinearLayout layout = new LinearLayout(this);
layout.setBackgroundColor(Color.rgb(255, 255, 255));
layout.setOrientation(LinearLayout.VERTICAL);
setContentView(layout);
// エディットテキストの生成
editText = new EditText(this);
editText.setText("", EditText.BufferType.NORMAL);
editText.setLayoutParams(new

LinearLayout.LayoutParams(MP,

WC));
layout.addView(editText);
layout.addView(makeButton("HTTP 通信", "read"));
}
/**
* ボタンの生成
* @param text
* @param tag
* @return
*/
private Button makeButton(String text, String tag) {
Button button = new Button(this);
button.setText(text);
button.setTag(tag);
button.setOnClickListener(this);
button.setLayoutParams(new

LinearLayout.LayoutParams(WC,

WC));
return button;
}
@Override
public void onClick(View arg0) {
String tag = (String) arg0.getTag();
if (tag.equals("read")) {
Thread thread = new Thread(new Runnable() {
String text = null;
@Override
public void run() {
// HTTP 通信
try {
text

=

String(httpToData(URL));
} catch (Exception e) {
text = null;
}
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
if (text != null) {
editText.setText(text, TextView.BufferType.EDITABLE);
} else {
HttpEx.showDialog(HttpEx.this, "エラー", "読み込みに失敗しました");
}
}
});
}
});
thread.start();
}
}
public static byte[] httpToData(String path) throws Exception {
byte[] write = new byte[1024];
HttpURLConnection connection = null;
InputStream in = null;
ByteArrayOutputStream out = null;
try {
// HTTP 接続のオープン

new
URL url = new URL(path);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
in = connection.getInputStream();
out = new ByteArrayOutputStream();
int size;
while ((size = in.read(write)) > 0) {
out.write(write, 0, size);
}
out.close();
in.close();
connection.disconnect();
return out.toByteArray();
} catch (Exception e) {
try {
if (connection != null) {
connection.disconnect();
}
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
} catch (Exception e2) {
}
throw e;
}
}
private static void showDialog(Context context, String title, String text) {
AlertDialog.Builder ad = new AlertDialog.Builder(context);
ad.setTitle(title);
ad.setMessage(text);
ad.setPositiveButton("OK", null);
ad.show();
}
}
ソースが記述出来たら、Android Application として実行してください。
<演習>
GET リクエストで上記の URL にアクセスしていますが、POST 用のボタンを追加し、そ
のボタンをクリックされた場合は、POST リクエストを行うように修正しなさい。
また、リクエストクエリも追加で送信出来るように修正しなさい。

More Related Content

What's hot

Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...
Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...
Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...
Masaki Takeda
 
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio  と Team Foundation Server / Visual Studio Team Services で実現するビル...Visual Studio  と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Masaki Takeda
 
Team Foundation Server / Visual Studio Team Services 手順書
Team Foundation Server /Visual Studio Team Services 手順書Team Foundation Server /Visual Studio Team Services 手順書
Team Foundation Server / Visual Studio Team Services 手順書
Masaki Takeda
 
Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所
Masaki Takeda
 
Team Foundation Server プロセステンプレートの変更 手順書
Team Foundation Server プロセステンプレートの変更 手順書Team Foundation Server プロセステンプレートの変更 手順書
Team Foundation Server プロセステンプレートの変更 手順書
Masaki Takeda
 
Team Foundation Server 2015 Update 3 インストール 手順書 ~ SQL Server インストールから チームプロジェ...
Team Foundation Server 2015 Update 3インストール 手順書~ SQL Server インストールから チームプロジェ...Team Foundation Server 2015 Update 3インストール 手順書~ SQL Server インストールから チームプロジェ...
Team Foundation Server 2015 Update 3 インストール 手順書 ~ SQL Server インストールから チームプロジェ...
Masaki Takeda
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
miso- soup3
 
Team Founfation Server / Visual Studio Online ハンズオン トレーニング手順書
Team Founfation Server / Visual Studio Online  ハンズオン トレーニング手順書Team Founfation Server / Visual Studio Online  ハンズオン トレーニング手順書
Team Founfation Server / Visual Studio Online ハンズオン トレーニング手順書
Masaki Takeda
 
Team Foundation Server 2015 による テスト工数削減
Team Foundation Server 2015 によるテスト工数削減Team Foundation Server 2015 によるテスト工数削減
Team Foundation Server 2015 による テスト工数削減
Masaki Takeda
 
もう怖くない! Team Foundation Server 2015 Update 1 ワークアイテム管理と テンプレートのカスタマイズ 概要
もう怖くない!Team Foundation Server 2015 Update 1 ワークアイテム管理とテンプレートのカスタマイズ 概要もう怖くない!Team Foundation Server 2015 Update 1 ワークアイテム管理とテンプレートのカスタマイズ 概要
もう怖くない! Team Foundation Server 2015 Update 1 ワークアイテム管理と テンプレートのカスタマイズ 概要
Masaki Takeda
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
Shohei Okada
 
「Entity Framework Coreを使ってみる」 公開用
「Entity Framework Coreを使ってみる」 公開用「Entity Framework Coreを使ってみる」 公開用
「Entity Framework Coreを使ってみる」 公開用
ESM SEC
 
Visual Studio 2017 と Team Foundation Server / Visual Studio Team Services で実現...
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Visual Studio 2017 と Team Foundation Server / Visual Studio Team Services で実現...
Masaki Takeda
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
Kohki Nakashima
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
Oda Shinsuke
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
Kazuaki Ueda
 
Team Foundation Server 2015 Update 3 アップグレード 手順書 ~ Team Foundation Server 201...
Team Foundation Server 2015 Update 3アップグレード 手順書~ Team Foundation Server 201...Team Foundation Server 2015 Update 3アップグレード 手順書~ Team Foundation Server 201...
Team Foundation Server 2015 Update 3 アップグレード 手順書 ~ Team Foundation Server 201...
Masaki Takeda
 
Vue入門
Vue入門Vue入門
Vue入門
Takeo Noda
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
Tomoyuki Obi
 
Angular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overviewAngular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overview
Mitsuru Ogawa
 

What's hot (20)

Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...
Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...
Team Foundation Server / Visual Studio Team Services によるプロジェクト管理・リポジトリ管理・継続的イ...
 
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio  と Team Foundation Server / Visual Studio Team Services で実現するビル...Visual Studio  と Team Foundation Server / Visual Studio Team Services で実現するビル...
Visual Studio と Team Foundation Server / Visual Studio Team Services で実現するビル...
 
Team Foundation Server / Visual Studio Team Services 手順書
Team Foundation Server /Visual Studio Team Services 手順書Team Foundation Server /Visual Studio Team Services 手順書
Team Foundation Server / Visual Studio Team Services 手順書
 
Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所Visual Studio Code 拡張の勘所
Visual Studio Code 拡張の勘所
 
Team Foundation Server プロセステンプレートの変更 手順書
Team Foundation Server プロセステンプレートの変更 手順書Team Foundation Server プロセステンプレートの変更 手順書
Team Foundation Server プロセステンプレートの変更 手順書
 
Team Foundation Server 2015 Update 3 インストール 手順書 ~ SQL Server インストールから チームプロジェ...
Team Foundation Server 2015 Update 3インストール 手順書~ SQL Server インストールから チームプロジェ...Team Foundation Server 2015 Update 3インストール 手順書~ SQL Server インストールから チームプロジェ...
Team Foundation Server 2015 Update 3 インストール 手順書 ~ SQL Server インストールから チームプロジェ...
 
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825 Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
Hokuriku.NET ASP.NET MVC入門 「実践」 20120825
 
Team Founfation Server / Visual Studio Online ハンズオン トレーニング手順書
Team Founfation Server / Visual Studio Online  ハンズオン トレーニング手順書Team Founfation Server / Visual Studio Online  ハンズオン トレーニング手順書
Team Founfation Server / Visual Studio Online ハンズオン トレーニング手順書
 
Team Foundation Server 2015 による テスト工数削減
Team Foundation Server 2015 によるテスト工数削減Team Foundation Server 2015 によるテスト工数削減
Team Foundation Server 2015 による テスト工数削減
 
もう怖くない! Team Foundation Server 2015 Update 1 ワークアイテム管理と テンプレートのカスタマイズ 概要
もう怖くない!Team Foundation Server 2015 Update 1 ワークアイテム管理とテンプレートのカスタマイズ 概要もう怖くない!Team Foundation Server 2015 Update 1 ワークアイテム管理とテンプレートのカスタマイズ 概要
もう怖くない! Team Foundation Server 2015 Update 1 ワークアイテム管理と テンプレートのカスタマイズ 概要
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
「Entity Framework Coreを使ってみる」 公開用
「Entity Framework Coreを使ってみる」 公開用「Entity Framework Coreを使ってみる」 公開用
「Entity Framework Coreを使ってみる」 公開用
 
Visual Studio 2017 と Team Foundation Server / Visual Studio Team Services で実現...
Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...Visual Studio 2017 とTeam Foundation Server /Visual Studio Team Services で実現...
Visual Studio 2017 と Team Foundation Server / Visual Studio Team Services で実現...
 
JavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょJavaScriptでWebDriverのテストコードを書きましょ
JavaScriptでWebDriverのテストコードを書きましょ
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
Android test tutorial
Android test tutorialAndroid test tutorial
Android test tutorial
 
Team Foundation Server 2015 Update 3 アップグレード 手順書 ~ Team Foundation Server 201...
Team Foundation Server 2015 Update 3アップグレード 手順書~ Team Foundation Server 201...Team Foundation Server 2015 Update 3アップグレード 手順書~ Team Foundation Server 201...
Team Foundation Server 2015 Update 3 アップグレード 手順書 ~ Team Foundation Server 201...
 
Vue入門
Vue入門Vue入門
Vue入門
 
CLRH_120414_WFTDD
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDD
 
Angular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overviewAngular2 rc.1 unit testing overview
Angular2 rc.1 unit testing overview
 

Similar to ネットワーク第5回

Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Takakiyo Tanaka
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
Akira Inoue
 
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
takots
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るKiyoshi SATOH
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
Tomoaki Shimizu
 
CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8
Akira Onishi
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるdavid9142
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)JPCERT Coordination Center
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugY Watanabe
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Hideki Hashizume
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
ssuser65180a
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
Yoshifumi Kawai
 
.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能
takots
 
Ajax basic
Ajax basicAjax basic
Ajax basic
Katsuyuki Seino
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
takezoe
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころ
Masayuki Wakizaka
 
G0042 h
G0042 hG0042 h
G0042 h
silicone69
 
Web1.0のハイブリッドアプリ開発
Web1.0のハイブリッドアプリ開発Web1.0のハイブリッドアプリ開発
Web1.0のハイブリッドアプリ開発Kenta Tsuji
 

Similar to ネットワーク第5回 (20)

Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
Eclipse と Liberty プロファイルで始める Java EE 開発ハンズオン #jjug_ccc #ccc_r51
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発jQuery と MVC で実践する標準志向 Web 開発
jQuery と MVC で実践する標準志向 Web 開発
 
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
C#版人狼知能エージェントの作り方~Visual Studio編~(AIWolf.NET 1.0.6版)
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
node+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作るnode+socket.io+enchant.jsでチャットゲーを作る
node+socket.io+enchant.jsでチャットゲーを作る
 
cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携cocos2d-xとネイティブ間の連携
cocos2d-xとネイティブ間の連携
 
CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8CEDEC 2013 Unity on Windows 8
CEDEC 2013 Unity on Windows 8
 
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考えるNetラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
Netラボ2012年6月勉強会 マイクロソフトのオープンソース戦略を考える
 
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
Apache CommonsのHttpClientに おけるSSLサーバ証明書検証不備 (CVE-2012-5783)
 
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsugSpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
 
Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19Pro aspnetmvc3framework chap19
Pro aspnetmvc3framework chap19
 
sveltekit-ja.pdf
sveltekit-ja.pdfsveltekit-ja.pdf
sveltekit-ja.pdf
 
How to Make Own Framework built on OWIN
How to Make Own Framework built on OWINHow to Make Own Framework built on OWIN
How to Make Own Framework built on OWIN
 
.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能.NET CoreとVS Codeで作る人狼知能
.NET CoreとVS Codeで作る人狼知能
 
Ajax basic
Ajax basicAjax basic
Ajax basic
 
Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略Seasarプロジェクト徹底攻略
Seasarプロジェクト徹底攻略
 
AppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころAppiumのWebViewアプリテストの仕組みとハマりどころ
AppiumのWebViewアプリテストの仕組みとハマりどころ
 
G0042 h
G0042 hG0042 h
G0042 h
 
Web1.0のハイブリッドアプリ開発
Web1.0のハイブリッドアプリ開発Web1.0のハイブリッドアプリ開発
Web1.0のハイブリッドアプリ開発
 

More from Yukiko Kato

Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
Yukiko Kato
 
Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】Yukiko Kato
 
Javaプログラミング入門【第9回】
Javaプログラミング入門【第9回】Javaプログラミング入門【第9回】
Javaプログラミング入門【第9回】
Yukiko Kato
 
ネットワーク第9回
ネットワーク第9回ネットワーク第9回
ネットワーク第9回
Yukiko Kato
 
Javaプログラミング入門【第8回】
Javaプログラミング入門【第8回】Javaプログラミング入門【第8回】
Javaプログラミング入門【第8回】
Yukiko Kato
 
ネットワーク第8回目
ネットワーク第8回目ネットワーク第8回目
ネットワーク第8回目
Yukiko Kato
 
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】
Yukiko Kato
 
ネットワーク第7回
ネットワーク第7回ネットワーク第7回
ネットワーク第7回
Yukiko Kato
 
[PS11]ネットワーク第6回
[PS11]ネットワーク第6回[PS11]ネットワーク第6回
[PS11]ネットワーク第6回
Yukiko Kato
 
Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Yukiko Kato
 
ネットワーク第6回
ネットワーク第6回ネットワーク第6回
ネットワーク第6回
Yukiko Kato
 
[PS11]ネットワーク第5回
[PS11]ネットワーク第5回[PS11]ネットワーク第5回
[PS11]ネットワーク第5回
Yukiko Kato
 
Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】
Yukiko Kato
 
Javaプログラミング入門【第4回】
Javaプログラミング入門【第4回】Javaプログラミング入門【第4回】
Javaプログラミング入門【第4回】
Yukiko Kato
 
ネットワーク第4回目
ネットワーク第4回目ネットワーク第4回目
ネットワーク第4回目
Yukiko Kato
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
Yukiko Kato
 
ネットワーク第3回目
ネットワーク第3回目ネットワーク第3回目
ネットワーク第3回目
Yukiko Kato
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
Yukiko Kato
 
HTTPとは(HerokuとADTで実践編)
HTTPとは(HerokuとADTで実践編)HTTPとは(HerokuとADTで実践編)
HTTPとは(HerokuとADTで実践編)Yukiko Kato
 
Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】
Yukiko Kato
 

More from Yukiko Kato (20)

Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
 
Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】Javaデザインパターン入門【第2回】
Javaデザインパターン入門【第2回】
 
Javaプログラミング入門【第9回】
Javaプログラミング入門【第9回】Javaプログラミング入門【第9回】
Javaプログラミング入門【第9回】
 
ネットワーク第9回
ネットワーク第9回ネットワーク第9回
ネットワーク第9回
 
Javaプログラミング入門【第8回】
Javaプログラミング入門【第8回】Javaプログラミング入門【第8回】
Javaプログラミング入門【第8回】
 
ネットワーク第8回目
ネットワーク第8回目ネットワーク第8回目
ネットワーク第8回目
 
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】
 
ネットワーク第7回
ネットワーク第7回ネットワーク第7回
ネットワーク第7回
 
[PS11]ネットワーク第6回
[PS11]ネットワーク第6回[PS11]ネットワーク第6回
[PS11]ネットワーク第6回
 
Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】Javaプログラミング入門【第6回】
Javaプログラミング入門【第6回】
 
ネットワーク第6回
ネットワーク第6回ネットワーク第6回
ネットワーク第6回
 
[PS11]ネットワーク第5回
[PS11]ネットワーク第5回[PS11]ネットワーク第5回
[PS11]ネットワーク第5回
 
Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】
 
Javaプログラミング入門【第4回】
Javaプログラミング入門【第4回】Javaプログラミング入門【第4回】
Javaプログラミング入門【第4回】
 
ネットワーク第4回目
ネットワーク第4回目ネットワーク第4回目
ネットワーク第4回目
 
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
 
ネットワーク第3回目
ネットワーク第3回目ネットワーク第3回目
ネットワーク第3回目
 
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
 
HTTPとは(HerokuとADTで実践編)
HTTPとは(HerokuとADTで実践編)HTTPとは(HerokuとADTで実践編)
HTTPとは(HerokuとADTで実践編)
 
Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】Javaプログラミング入門【第1回】
Javaプログラミング入門【第1回】
 

Recently uploaded

FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 

Recently uploaded (16)

FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 

ネットワーク第5回

  • 1. 2013 ネットワーク第 5 回 目 HTTP 通信/ソケット通信
  • 2. 1. Socket 通信を行うプログラム ソケット通信を利用したチャットクライアント(Android アプリ)とサーバプログラム を作成します。今回は、サーバは自分の PC 内に起動させます。 ※Android Virtual Device(AVD)の設定 Eclipse からエミュレータでデバッグを行うために、エミュレータの端末の設定を追加しま す。 Eclipse のメニューから[ウインドウ]->[AVD Manager]を選択し、 [New]ボタンをクリック。 以下のように設定してください。 ソースコード(クライアント側) Eclipse を開いて、パッケージエクスプローラーで右クリックし、[新規]->[Android プ
  • 3. ロジェクト]を選択します。 プロジェクト名は 「SocketEx」 としてください。 Target SDK と Compile With は Android4.0(IceCreamSandwich)を選びます。ActivityName は 「SocketEx」としましょう。 package com.example.socketex; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class SocketEx extends Activity implements View.OnClickListener{ private final static String BR = System.getProperty("line.separator"); private final static int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private final static int MP = LinearLayout.LayoutParams.MATCH_PARENT; private static final String ADDRESS = "192.168.1.100"; ※変更すること! private TextViewlblReceive; private EditTexteditText; private Button btnSend; private Socket socket; private InputStream in; private OutputStream out; private boolean error;
  • 4. private final Handler handler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.rgb(255,255,255)); layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); editText = new EditText(this); editText.setId(2); editText.setText("", TextView.BufferType.NORMAL); editText.setLayoutParams(new LinearLayout.LayoutParams(MP, WC)); layout.addView(editText); btnSend = new Button(this); btnSend.setText("送信"); btnSend.setOnClickListener(this); btnSend.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); layout.addView(btnSend); lblReceive = new TextView(this); lblReceive.setId(1); lblReceive.setText(""); lblReceive.setTextSize(16.0f); lblReceive.setTextColor(Color.rgb(0, 0, 0)); lblReceive.setLayoutParams(new WC)); layout.addView(lblReceive); LinearLayout.LayoutParams(MP,
  • 5. } @Override public void onStart() { super.onStart(); Thread thread = new Thread() { public void run() { try { connect(ADDRESS, 8080); } catch (Exception e) { } } }; thread.start(); } @Override public void onStop() { super.onStop(); disconnect(); } private void addText(final String text) { handler.post(new Runnable() { @Override public void run() { lblReceive.setText(text + BR + lblReceive.getText()); } }); } private void connect(String address, int port) { int size; String str;
  • 6. byte[] w = new byte[1024]; try { addText("接続中"); socket = new Socket(address, port); in = socket.getInputStream(); out = socket.getOutputStream(); addText("接続完了"); while(socket != null &&socket.isConnected()) { size = in.read(w); if (size <= 0) { continue; } str = new String(w, 0, size, "UTF-8"); addText(str); } } catch (Exception e) { addText("通信に失敗しました。"); } } private void disconnect() { try { socket.close(); socket = null; } catch (Exception e) { } } @Override public void onClick(View v) { Thread thread = new Thread(new Runnable() { @Override
  • 7. public void run() { error = false; try { if (socket != null &&socket.isConnected()) { byte[] w = editText.getText().toString().getBytes("UTF8"); out.write(w); out.flush(); } } catch (Exception e) { error = true; } handler.post(new Runnable() { public void run() { if (error) { addText(" 通 信 に 失 敗 し ま した"); } else { editText.setText("", TextView.BufferType.NORMAL); } } }); } }); thread.start(); } } ソースコード(サーバ側) Eclipse で新規 Java プロジェクト『chatserver』を作成します。作成したら、src フォルダ の直下に、 『ChatServer.java』 『CharServerThread.java』2 つの java ファイルを作成しま す。ソースコードはそれぞれ以下のように記述します。 ○ChatServer.java
  • 8. package com.example; import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; /** * * This class launches the web application in an embedded Jetty container. * This is the entry point to your application. The Java command that is used for * launching should fire this main method. * */ public class ChatServer { public void start(int port) { ServerSocket server; Socket socket; ChatServerThread thread; try { server = new ServerSocket(port); System.err.println("ChatServer start" + "¥nIP Address:" InetAddress.getLocalHost().getHostAddress() + "¥nPort:" + port); while (true) { try { socket = server.accept(); thread = new ChatServerThread(socket); thread.start(); } catch (IOException e) { System.out.println(e); } +
  • 9. } } catch (IOException e) { System.err.println(e); } } public static void main(String[] args) throws Exception{ ChatServer server = new ChatServer(); server.start(8080); } } ○ChatServerThread.java package com.example; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.List; public class ChatServerThread extends Thread { private static List<ChatServerThread> ArrayList<ChatServerThread>(); private Socket socket; public ChatServerThread(Socket socket) { super(); this.socket = socket; threads.add(this); } threads = new
  • 10. public void run() { InputStream in = null; String message; int size; byte[] w = new byte[10240]; try { System.err.println("ChatServerThread start"); in = socket.getInputStream(); while(true) { try { size = in.read(w); if (size <= 0) { throw new IOException(); } message = new String(w, 0, size, "UTF8"); System.out.println(message); sendMessageAll(message); } catch(IOException e) { System.out.println("ChatServerThread stop"); socket.close(); threads.remove(this); return; } } } catch (IOException e) { System.err.println(e); } } public void sendMessageAll(String message) { for (ChatServerThread thread : threads) {
  • 11. if (thread.isAlive()) { thread.sendMessage(this, message); } } System.out.println(message); } public void sendMessage(ChatServerThread talker, String message) { try { OutputStream out = socket.getOutputStream(); byte[] w = message.getBytes("UTF8"); out.write(w); out.flush(); } catch (IOException e) { } } } ソースを記述したら、Java アプリケーションとして実行してください。 その後、Android アプリを起動します。 2. HTTP 通信を行う Android アプリ HTTP 通信の GET/POST メソッドを行ってネット上の情報を表示するアプリを作成します。 ソースコード Eclipse を開いて、パッケージエクスプローラーで右クリックし、[新規]->[Android プロジ ェクト]を選択します。 プロジェクト名は 「HttpEx」 としてください。 Target SDK と Compile With は Android4.0(IceCreamSandwich)を選びます。ActivityName は「HttpEx」としま しょう。 プロジェクトが作成出来たら、src.com.example.httpex フォルダの HttpEx.java ファイル を以下のように編集してください。 また、AndroidManifest.xml を開き、 『Permission』タブの中の Add ボタンをクリックし て、 『User Permission』を選択します。Name は『android.permission.INTERNET』を選 択してください。 package com.example.httpex;
  • 12. import java.io.ByteArrayOutputStream; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class HttpEx extends Activity implements View.OnClickListener{ private static final int WC = LinearLayout.LayoutParams.WRAP_CONTENT; private static final int MP = LinearLayout.LayoutParams.MATCH_PARENT; private EditTexteditText; // リクエスト先の URL private static final String URL = "http://httpserverex.herokuapp.com/hello"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // レイアウトの生成 LinearLayout layout = new LinearLayout(this); layout.setBackgroundColor(Color.rgb(255, 255, 255));
  • 13. layout.setOrientation(LinearLayout.VERTICAL); setContentView(layout); // エディットテキストの生成 editText = new EditText(this); editText.setText("", EditText.BufferType.NORMAL); editText.setLayoutParams(new LinearLayout.LayoutParams(MP, WC)); layout.addView(editText); layout.addView(makeButton("HTTP 通信", "read")); } /** * ボタンの生成 * @param text * @param tag * @return */ private Button makeButton(String text, String tag) { Button button = new Button(this); button.setText(text); button.setTag(tag); button.setOnClickListener(this); button.setLayoutParams(new LinearLayout.LayoutParams(WC, WC)); return button; } @Override public void onClick(View arg0) { String tag = (String) arg0.getTag(); if (tag.equals("read")) { Thread thread = new Thread(new Runnable() { String text = null;
  • 14. @Override public void run() { // HTTP 通信 try { text = String(httpToData(URL)); } catch (Exception e) { text = null; } Handler handler = new Handler(); handler.post(new Runnable() { @Override public void run() { if (text != null) { editText.setText(text, TextView.BufferType.EDITABLE); } else { HttpEx.showDialog(HttpEx.this, "エラー", "読み込みに失敗しました"); } } }); } }); thread.start(); } } public static byte[] httpToData(String path) throws Exception { byte[] write = new byte[1024]; HttpURLConnection connection = null; InputStream in = null; ByteArrayOutputStream out = null; try { // HTTP 接続のオープン new
  • 15. URL url = new URL(path); connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.connect(); in = connection.getInputStream(); out = new ByteArrayOutputStream(); int size; while ((size = in.read(write)) > 0) { out.write(write, 0, size); } out.close(); in.close(); connection.disconnect(); return out.toByteArray(); } catch (Exception e) { try { if (connection != null) { connection.disconnect(); } if (in != null) { in.close(); } if (out != null) { out.close(); } } catch (Exception e2) { } throw e; } } private static void showDialog(Context context, String title, String text) { AlertDialog.Builder ad = new AlertDialog.Builder(context); ad.setTitle(title);
  • 16. ad.setMessage(text); ad.setPositiveButton("OK", null); ad.show(); } } ソースが記述出来たら、Android Application として実行してください。 <演習> GET リクエストで上記の URL にアクセスしていますが、POST 用のボタンを追加し、そ のボタンをクリックされた場合は、POST リクエストを行うように修正しなさい。 また、リクエストクエリも追加で送信出来るように修正しなさい。