题目:手机网络游戏-黑白棋要点:手机与服务端实现socket协议信息交互完成各种控制要求:(1)基于智能手机开发手机客户端程序实现与服务器的socket通信。 (2)在android系统的手机终端上实现。 (3)开发黑白棋游戏客户端及服务端,自己定义协议,并有完备的程序模块说明及注释。黑白棋规则参加:http://qqgamecdnimg.qq.com/help/rule202.html (4)客户端程序可与服务端通信,完成用户选桌、支持多局同时开。(5)客户端可响应手机软键盘或硬键盘(上下左右,确认、返回,1-9等键)操作,完成走棋及游戏控制。(6)客户端与服务端交互走棋及牌局信息,响应服务端返回信息,控制棋局画面、棋子数及相关逻辑变化。(7)完成胜负判断,积分记录。-----------------------------------------------任务进度------------------------------------------2011.1.31 完成android开发环境配置,完成参考代码的运行,缺少SOCKET编程,双人对战功能模块。----------------------------------------------参考代码及网文------------------------------------1,http://androidappdocs.appspot.com/reference/packages.html(API文档)2,http://apps.hi.baidu.com/share/detail/1937413 (开发环境配置)3,http://www.javaeye.com/topic/382272 (参考源码下载,只有人机对战)----------------------------------------------任务问题-------------------------------------------
1,在环境配置时,参考他人的文章,出现SDK安装问题,在线升级,解决了。2,参考代码运行时,XML文件出现配置问题,暂时修改为注释信息,通过,运行3,参考源码BUG(1)undo后出手先手顺序有误。4,缺少双人对战功能模块,SOCKET编程 很少接触,希望大家共同讨论。
1,在环境配置时,参考他人的文章,出现SDK安装问题,在线升级,解决了。2,参考代码运行时,XML文件出现配置问题,暂时修改为注释信息,通过,运行3,参考源码BUG(1)undo后出手先手顺序有误。4,缺少双人对战功能模块,SOCKET编程 很少接触,希望大家共同讨论。
SOCKET 创建已经成功 在测试 CONNECT 段代码
QQ的手机游戏源码很少。 遇到的问题:
1,服务器端,怎么写
解决方法:两客户端连接服务器端,服务端进行逻辑运算与转发
2,客户端,显示
解决方法: android 显示不会写,怎么才能完成选桌界面,按照他的表单项来仿照着写。
2011.2.9
1.完成编写服务器端户端的通信demo
2.了解 android.os.handler
3.Android有四大基本组件:Activity、Service、Broadcast Receiver、Content Provider
2011.2.9 总结
1,通信写好了, 客户端报错。
2,完成
3,完成Activity
2011.2.10 任务
1,调试 客户端与服务器的通信
2,了解Service、Broadcast Receiver、Content Provider
LOGCAT 报错:
FATAL EXCEPTION
JAVA.LANG.NOCLASSEXCEPTION
2011.2.10 总结
1,客户端服务器 通信调好了
2,后面了解Service、Broadcast Receiver、Content Provider没看2011.2.11
1,主管谈话,认识到学习方法有误,应该首先了解android的基本架构
2,拆分单机版本的逻辑与显示
1,B/S socket 通信调通了
2,其他的组建没看,研究了下 andorid 的架构图。
1,理解 socket自定义协议 2,修改 前期的 socket,demo(以下为代码)
3,分析怎么使用socket 使客户端与服务器进行业务通信
Server部分的Java代码:
package com.wll.mysocket;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class myServer implements Runnable{
public void run() {
try {
ServerSocket serverSocket=new ServerSocket(54321);
while(true)
{
System.out.println("接收用户连接:");
//接受客户端请求
Socket client=serverSocket.accept();
System.out.println("accept:");
try
{
//接受客户端信息
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
String str=in.readLine();
System.out.println("read:"+str);
//向服务器发送消息
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())),true);
out.println("Server Message:"+str);
in.close();
out.close();
}catch(Exception ex)
{
System.out.println(ex.getMessage());
ex.printStackTrace();
}
finally
{
client.close();
System.out.println("close");
}
}
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
public static void main(String [] args)
{
Thread desktopServerThread=new Thread(new myServer());
desktopServerThread.start();
}
}客户端用Android代码编写:package com.wll.mysocket;
import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import android.*;
//客户端的实现
public class mySocketAct extends Activity {
private TextView text1;
private Button but1;
private EditText edit1;
private final String DEBUG_TAG="mySocketAct"; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text1=(TextView)findViewById(R.id.text1);
but1=(Button)findViewById(R.id.but1);
edit1=(EditText)findViewById(R.id.edit);
but1.setOnClickListener(new Button.OnClickListener()
{
public void onClick(View v) {
Socket socket=null;
String mesg=edit1.getText().toString()+"\r\n";
edit1.setText("");
try {
socket=new Socket("10.0.2.2",54321);
//向服务器发送信息
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(mesg);
//接受服务器的信息
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String mstr=br.readLine();
if(mstr!=null)
{
text1.setText(mstr);
}else
{
text1.setText("数据错误");
}
out.close();
br.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e)
{
Log.e(DEBUG_TAG,e.toString());
}
}
});
}
}其中很重要的一个问题是:电脑与模拟器之间的通信问题,必须在AndroidManifest.xml中编写:
<uses-permission android:name="android.permission.INTERNET" />
不知这样理解是否有偏差。 比如像: 客户端点击放下棋子,我要调用服务端的kill()方法,就要进行连接通信,以此类推,每次需要,每次就进行一次连接。是不是有些太繁琐?
1,理解 socket自定义协议 2,修改 前期的 socket,demo(以下为代码)
3,分析怎么使用socket 使客户端与服务器进行业务通信
2011.2.15 总结
1,一个自定义协议参考
http://blog.csdn.net/lincyang/archive/2010/12/31/6109076.aspx
2,socket 基础
http://developer.51cto.com/art/200902/108179.htm
3,在尝试 比如像: 客户端点击放下棋子,我要调用服务端的kill()方法,就要进行连接通信,依次类推,每次需要,每次就进行一次连接。
2011.2.16 任务
1,完成 一个客户端连接调用服务器函数,显示函数结果的例子。
2,继续学习mars 老师的视频学习资料
http://www.cmd100.com/bbs/home-space-uid-149-do-thread-view-me.html
1,完成 一个客户端连接调用服务器函数,显示函数结果的例子。
2,继续学习mars 老师的视频学习资料
http://www.cmd100.com/bbs/home-space-uid-149-do-thread-view-me.html
2011.2.16总结
1,学习了C/S结构下,多线程处理多对一客户端连接服务器的例子
2,看到了4集。是哦或挺多
2011.2.17 任务
1,开始分离一个客户端的任务模块
2,继续mars 教程
1,开始分离一个客户端的任务模块
2,继续mars 教程
2011.2.17总结
1,卡在这了,实在走不动。请教了老师,如果服务器连接多台设备,要有主线程和工作线程来服务。
2,小有收获 ,mars
2011.2.18 任务
1,完成基本的通信。(快崩溃了)所有的都调试了,IP地址 也是10.0.2.2,这是模拟器和本机通信的地址。
2,总结mars教程。
import java.net.UnknownHostException;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;public class mySocketAct extends Activity {
private TextView text1;
private Button but1;
private EditText edit1;
private final String DEBUG_TAG="mySocketAct"; public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text1=(TextView)findViewById(R.id.TextView01);
but1=(Button)findViewById(R.id.Button01);
edit1=(EditText)findViewById(R.id.EditText01); //test
but1.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { but1.setText("点到了");
Socket socket=null;
String mesg=edit1.getText().toString()+"\r\n";
edit1.setText("点到了");
try {
socket=new Socket("10.0.2.2",54321);
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(mesg);
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String mstr=br.readLine();
if(mstr!=null)
{
text1.setText(mstr);
}else
{
text1.setText("false");
}
out.close();
br.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e)
{
Log.e(DEBUG_TAG,e.toString());
}
} });
/* but1.setOnClickListener(new Button.OnClickListener()
{
public void onClick1(View v) {
Socket socket=null;
String mesg=edit1.getText().toString()+"\r\n";
edit1.setText("点到了");
try {
socket=new Socket("10.0.2.2",54321);
PrintWriter out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
out.println(mesg);
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String mstr=br.readLine();
if(mstr!=null)
{
text1.setText(mstr);
}else
{
text1.setText("false");
}
out.close();
br.close();
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e)
{
Log.e(DEBUG_TAG,e.toString());
}
} @Override
public void onClick(View arg0) {
}
});*/
}
}客户端的监听有误