题目:手机网络游戏-黑白棋要点:手机与服务端实现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.   

    目:手机网络游戏-黑白棋要点:手机与服务端实现socket协议信息交互完成各种控制要求:(1)基于智能手机开发手机客户端程序实现与服务器的socket通信。  (2)在android系统的手机终端上实现。
      

  2.   

    调试太卡了 能不能 不启动模拟器直接启动 程序呢  
    SOCKET 创建已经成功 在测试 CONNECT 段代码 
      

  3.   

    题目:手机网络游戏-黑白棋要点:手机与服务端实现socket协议信息交互完成各种控制
      

  4.   


      QQ的手机游戏源码很少。    遇到的问题:
            1,服务器端,怎么写
                  解决方法:两客户端连接服务器端,服务端进行逻辑运算与转发
            2,客户端,显示
                  解决方法: android 显示不会写,怎么才能完成选桌界面,按照他的表单项来仿照着写。
      

  5.   

    任务:
    2011.2.9
             1.完成编写服务器端户端的通信demo
             2.了解 android.os.handler
             3.Android有四大基本组件:Activity、Service、Broadcast Receiver、Content Provider
      

  6.   


    2011.2.9 总结
         1,通信写好了, 客户端报错。
         2,完成
         3,完成Activity
    2011.2.10 任务
          1,调试 客户端与服务器的通信
          2,了解Service、Broadcast Receiver、Content Provider
      

  7.   

    好累 。陷入困境
    LOGCAT 报错:
            FATAL EXCEPTION  
            JAVA.LANG.NOCLASSEXCEPTION
      

  8.   


    2011.2.10 总结
         1,客户端服务器 通信调好了
         2,后面了解Service、Broadcast Receiver、Content Provider没看2011.2.11  
         1,主管谈话,认识到学习方法有误,应该首先了解android的基本架构
          2,拆分单机版本的逻辑与显示
        
      

  9.   

    2011.2.11 总结
          1,B/S socket 通信调通了
          2,其他的组建没看,研究了下 andorid 的架构图。
      

  10.   

    我要做一个基于Android平台的手机应用开发-网上订书系统 刚接触android 。学习学习
      

  11.   

    2011.2.15 任务
           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" />
      

  12.   

        突然醒悟了一点。单机版中,每次有显示与逻辑间的函数调用,在网络版中,就进行一次socket连接通信。
        不知这样理解是否有偏差。 比如像: 客户端点击放下棋子,我要调用服务端的kill()方法,就要进行连接通信,以此类推,每次需要,每次就进行一次连接。是不是有些太繁琐?
      

  13.   

    个别特殊控件,实现一下也没什么问题,由于这个项目周期很长(两年多),正好借新项目,好好总结一下目前比较常见的界面开发技术。今天先总结一下windowless的致命缺点,过两天总结它的优点,和其它技术的优缺点。再提一句,我们的项目是使用wpf开发,也是windowless,但与我下面所说的windowless是两回事。windowless或者称handleless,也就是无句柄窗口,在设计和实现的时候,每个控件都自己实现,最后画到父窗口中。另一个伪windowless是用标准mfc控件,然后通过hook或其它远程线程注入等技术,让spy++等软件,看不到窗口句柄。这主要是为了防止盗号木马通过edit窗口句柄,盗取用户名和密码。好了,费话少说,下面是小弟总结的windowless的缺点,如果要使用这类界面开发技术,要么有源代码,要么是自己公司实现的,否则风险非常大。1、无窗口句柄,所有您以前关于“窗口”概念的知识都白学了。您将不可能使用::ShowWindow(hWnd, SW_HIDE)来隐藏一个窗口,也不能使用::MoveWindow
      

  14.   

    2011.2.15 任务
      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
      

  15.   

    2011.2.16 任务
      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 教程
      

  16.   

    郑州一小公司,但是蛮喜欢做andorid 的开发。。蛮有新鲜感。。
      

  17.   

    2011.2.17 任务
      1,开始分离一个客户端的任务模块
      2,继续mars 教程
    2011.2.17总结
        1,卡在这了,实在走不动。请教了老师,如果服务器连接多台设备,要有主线程和工作线程来服务。
        2,小有收获 ,mars
    2011.2.18 任务
          1,完成基本的通信。(快崩溃了)所有的都调试了,IP地址 也是10.0.2.2,这是模拟器和本机通信的地址。
          2,总结mars教程。
          
      

  18.   

    demo 调试好了。哈哈 package com.wll.mysocket;import java.io.*;import java.net.Socket;
    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) {


    }        
            });*/
        }
    }客户端的监听有误