推荐一个学java或C++的网站http://www.weixueyuan.net/,本来想自己学了总结出来再写博客,现在没时间,打字太慢!!!!,又想让这好东西让许多人知道。

关于网络通信:每一台电脑都有自己的ip地址,每台电脑上的网络应用程序都有自己的通信端口,张三的电脑(ip:192.168.1.110)上有一个网络应用程序A(通信端口5000),李四的电脑(ip:192.168.1.220)上有一个网络应用程序B(通信端口8000),张三给李四发消息,首先你要知道李四的ip地址,向指定的ip(李四ip:192.168.1.220)发信息,信息就发到了李四的电脑。再指定一下发送的端口号(通信端口8000),信息就发到了李四电脑的网络应用程序B上。

TCP--一种网络通信方式而已。分为服务器(网络应用程序)和客户端(网络应用程序),TCP通信过程,首先打开服务器,监听自己的网络通信端口(假设为9000),打开客户端,设置好要连接的ip地址和服务器的网络通信端口(9000),这样服务器一旦监听到网络通信端口有连接,二者就建立了连接。这是我写的TCP客服端的开头。直接拿过来了

因为是服务器所以在布局文件里放一个button用于启动服务器;一个button用于发送消息;放一个edittext用于监听端口;一个edittext用于接收消息;一个edittext用于发送消息(我会把源码放在最后,前面所显示的我可能会在上面涂鸦的!!!)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.Tcpserver.MainActivity" > <!-- 监听端口号 -->
<TextView
android:id="@+id/port_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="监听的端口:" />
<!-- 端口号 -->
<EditText
android:id="@+id/port_EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="8080"
android:layout_below="@id/port_TextView"
/> <!-- 发送的消息 -->
<TextView
android:id="@+id/message_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送的消息"
android:layout_below="@id/port_EditText"/>
<!-- 发送消息框 -->
<EditText
android:id="@+id/message_EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入要发送的消息:"
android:layout_below="@id/message_TextView"
/> <!-- 启动按钮 -->
<Button
android:id="@+id/start_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动服务"
android:layout_below="@id/message_EditText"
android:layout_alignParentLeft="true"
/>
<!-- 发送按钮 -->
<Button
android:id="@+id/send_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送消息"
android:layout_below="@id/message_EditText"
android:layout_alignParentRight="true"
/>
<!-- 接收的消息-->
<TextView
android:id="@+id/receive_TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/start_button"
android:text="接收的消息:"
/>
<!-- 接收消息框 -->
<EditText
android:gravity="top"让消息每回都从编辑文本框的开头显示
android:id="@+id/receive_EditText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/receive_TextView"
/>
</RelativeLayout>

看一下java的api文档

所以呢  ServerSocket serversocket = new ServerSocket(8080);就完成了服务器的监听,

但是由于不让在主进程里启动监听所以就把它放在一个新的进程里吧。看一看下面代码

package com.Tcpserver;

import java.io.IOException;
import java.net.ServerSocket; import android.app.Activity;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast; public class MainActivity extends Activity { ServerSocket serverSocket;//创建ServerSocket
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 读一下手机wifi状态下的ip地址,只有知道它的ip才能连接它嘛
*/
Toast.makeText(MainActivity.this, getLocalIpAddress(), Toast.LENGTH_SHORT).show();
/**
* 启动服务器监听线程
*/
ServerSocket_thread serversocket_thread = new ServerSocket_thread();
serversocket_thread.start();
}
/**
* 服务器监听线程
*/
class ServerSocket_thread extends Thread
{
public void run()//重写Thread的run方法
{
try
{
serverSocket = new ServerSocket(8080);//监听8080端口,这个程序的通信端口就是8080了
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*
* 获取WIFI下ip地址
*/
private String getLocalIpAddress() {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// 获取32位整型IP地址
int ipAddress = wifiInfo.getIpAddress(); //返回整型地址转换成“*.*.*.*”地址
return String.format("%d.%d.%d.%d",
(ipAddress & 0xff), (ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
}
}

对了不要忘了加权限,一个wifi权限,一个internet权限,打开wifi和网络需要权限的

加权限过程

然后看一下

再贴一下代码吧,别忘了加权限,不然要么没反应要么显示xxxxx已停止运行

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.Tcpserver"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

好了我就把现在的下载到手机上

这样一打开这个软件便启动了监听,按钮,文本框什么的还没弄

好现在打开电脑上的网络调试助手

加点功能,点击启动服务器按钮后才启动服务,但是端口被我们定死了,,,,可不好玩,我们就设置连接的端口号为文本框中的端口号;

int port =Integer.valueOf(PortText.getText().toString());//获取端口号

package com.Tcpserver;

import java.io.IOException;
import java.net.ServerSocket; import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { ServerSocket serverSocket;//创建ServerSocket对象
Button startButton;
EditText portEditText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 读一下手机wifi状态下的ip地址,只有知道它的ip才能连接它嘛
*/
Toast.makeText(MainActivity.this, getLocalIpAddress(), Toast.LENGTH_SHORT).show(); startButton = (Button) findViewById(R.id.start_button);
portEditText = (EditText) findViewById(R.id.port_EditText); startButton.setOnClickListener(startButtonListener); }
/**
* 启动服务按钮监听事件
*/
private OnClickListener startButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
/**
* 启动服务器监听线程
*/
ServerSocket_thread serversocket_thread = new ServerSocket_thread();
serversocket_thread.start();
}
};
/**
* 服务器监听线程
*/
class ServerSocket_thread extends Thread
{
public void run()//重写Thread的run方法
{
try
{
int port =Integer.valueOf(portEditText.getText().toString());//获取portEditText中的端口号
serverSocket = new ServerSocket(port);//监听port端口,这个程序的通信端口就是port了
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
*
* 获取WIFI下ip地址
*/
private String getLocalIpAddress() {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// 获取32位整型IP地址
int ipAddress = wifiInfo.getIpAddress(); //返回整型地址转换成“*.*.*.*”地址
return String.format("%d.%d.%d.%d",
(ipAddress & 0xff), (ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
}
}

接着,接收服务器发来的消息

对了有一点说错了是在

android 之TCP客户端编程   上的socket

其实socket这个类可以理解为(只要服务器和客服端建立连接就会建立socket),我们可以通过操作socket类中的方法得到我们想要的东西。感觉解释的也不咋的,不懂

package com.Tcpserver;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket; import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { ServerSocket serverSocket;//创建ServerSocket对象
Socket clicksSocket;//连接通道,创建Socket对象
Button startButton;
EditText portEditText;
EditText receiveEditText;
InputStream inputstream;//创建输入数据流
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 读一下手机wifi状态下的ip地址,只有知道它的ip才能连接它嘛
*/
Toast.makeText(MainActivity.this, getLocalIpAddress(), Toast.LENGTH_SHORT).show(); startButton = (Button) findViewById(R.id.start_button);
portEditText = (EditText) findViewById(R.id.port_EditText);
receiveEditText = (EditText) findViewById(R.id.receive_EditText); startButton.setOnClickListener(startButtonListener); }
/**
* 启动服务按钮监听事件
*/
private OnClickListener startButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
/**
* 启动服务器监听线程
*/
ServerSocket_thread serversocket_thread = new ServerSocket_thread();
serversocket_thread.start();
}
};
/**
* 服务器监听线程
*/
class ServerSocket_thread extends Thread
{
public void run()//重写Thread的run方法
{
try
{
int port =Integer.valueOf(portEditText.getText().toString());//获取portEditText中的端口号
serverSocket = new ServerSocket(port);//监听port端口,这个程序的通信端口就是port了
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true)
{
try
{
//监听连接 ,如果无连接就会处于阻塞状态,一直在这等着
clicksSocket = serverSocket.accept();
inputstream = clicksSocket.getInputStream();//获取输入流
//启动接收线程
Receive_Thread receive_Thread = new Receive_Thread();
receive_Thread.start();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
*
* 接收线程
*
*/
class Receive_Thread extends Thread//继承Thread
{
public void run()//重写run方法
{
while (true)
{
try
{
final byte[] buf = new byte[1024];
final int len = inputstream.read(buf);
runOnUiThread(new Runnable()
{
public void run()
{
receiveEditText.setText(new String(buf,0,len));
}
});
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
*
* 获取WIFI下ip地址
*/
private String getLocalIpAddress() {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// 获取32位整型IP地址
int ipAddress = wifiInfo.getIpAddress(); //返回整型地址转换成“*.*.*.*”地址
return String.format("%d.%d.%d.%d",
(ipAddress & 0xff), (ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
}
}
runOnUiThread(new Runnable()
{
public void run()
{
receiveEditText.setText(new String(buf,0,len));
}
});
这个是因为不允许在其它线程里对组件进行操作,但是给了
runOnUiThread(new Runnable()
{
public void run()
{
//填写要操作的程序
}
});
这种方法来对组件进行操作


最后一个发送消息


package com.Tcpserver;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { ServerSocket serverSocket;//创建ServerSocket对象
Socket clicksSocket;//连接通道,创建Socket对象
Button startButton;//发送按钮
EditText portEditText;//端口号
EditText receiveEditText;//接收消息框
Button sendButton;//发送按钮
EditText sendEditText;//发送消息框
InputStream inputstream;//创建输入数据流
OutputStream outputStream;//创建输出数据流
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 读一下手机wifi状态下的ip地址,只有知道它的ip才能连接它嘛
*/
Toast.makeText(MainActivity.this, getLocalIpAddress(), Toast.LENGTH_SHORT).show(); startButton = (Button) findViewById(R.id.start_button);
portEditText = (EditText) findViewById(R.id.port_EditText);
receiveEditText = (EditText) findViewById(R.id.receive_EditText);
sendButton = (Button) findViewById(R.id.send_button);
sendEditText = (EditText) findViewById(R.id.message_EditText); startButton.setOnClickListener(startButtonListener);
sendButton.setOnClickListener(sendButtonListener);
}
/**
* 启动服务按钮监听事件
*/
private OnClickListener startButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
/**
* 启动服务器监听线程
*/
ServerSocket_thread serversocket_thread = new ServerSocket_thread();
serversocket_thread.start();
}
};
/**
* 服务器监听线程
*/
class ServerSocket_thread extends Thread
{
public void run()//重写Thread的run方法
{
try
{
int port =Integer.valueOf(portEditText.getText().toString());//获取portEditText中的端口号
serverSocket = new ServerSocket(port);//监听port端口,这个程序的通信端口就是port了
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true)
{
try
{
//监听连接 ,如果无连接就会处于阻塞状态,一直在这等着
clicksSocket = serverSocket.accept();
inputstream = clicksSocket.getInputStream();//
//启动接收线程
Receive_Thread receive_Thread = new Receive_Thread();
receive_Thread.start();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
*
* 接收线程
*
*/
class Receive_Thread extends Thread//继承Thread
{
public void run()//重写run方法
{
while (true)
{
try
{
final byte[] buf = new byte[1024];
final int len = inputstream.read(buf);
runOnUiThread(new Runnable()
{
public void run()
{
receiveEditText.setText(new String(buf,0,len));
}
});
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 发送消息按钮事件
*/
private OnClickListener sendButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
try
{
//获取输出流
outputStream = clicksSocket.getOutputStream();
//发送数据
outputStream.write(sendEditText.getText().toString().getBytes());
//outputStream.write("0".getBytes());
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
/**
*
* 获取WIFI下ip地址
*/
private String getLocalIpAddress() {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// 获取32位整型IP地址
int ipAddress = wifiInfo.getIpAddress(); //返回整型地址转换成“*.*.*.*”地址
return String.format("%d.%d.%d.%d",
(ipAddress & 0xff), (ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
}
}

布局源码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.Tcpserver.MainActivity" > <!-- 监听端口号 -->
<TextView
android:id="@+id/port_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="监听的端口:" />
<!-- 端口号 -->
<EditText
android:id="@+id/port_EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="8080"
android:layout_below="@id/port_TextView"
/> <!-- 发送的消息 -->
<TextView
android:id="@+id/message_TextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送的消息"
android:layout_below="@id/port_EditText"/>
<!-- 发送消息框 -->
<EditText
android:id="@+id/message_EditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="输入要发送的消息:"
android:layout_below="@id/message_TextView"
/> <!-- 启动按钮 -->
<Button
android:id="@+id/start_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动服务"
android:layout_below="@id/message_EditText"
android:layout_alignParentLeft="true"
/>
<!-- 发送按钮 -->
<Button
android:id="@+id/send_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送消息"
android:layout_below="@id/message_EditText"
android:layout_alignParentRight="true"
/>
<!-- 接收的消息-->
<TextView
android:id="@+id/receive_TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/start_button"
android:text="接收的消息:"
/>
<!-- 接收消息框 -->
<EditText
android:gravity="top"
android:id="@+id/receive_EditText"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/receive_TextView"
/>
</RelativeLayout>

。java源码

package com.Tcpserver;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket; import android.app.Activity;
import android.content.SharedPreferences.Editor;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends Activity { ServerSocket serverSocket;//创建ServerSocket对象
Socket clicksSocket;//连接通道,创建Socket对象
Button startButton;//发送按钮
EditText portEditText;//端口号
EditText receiveEditText;//接收消息框
Button sendButton;//发送按钮
EditText sendEditText;//发送消息框
InputStream inputstream;//创建输入数据流
OutputStream outputStream;//创建输出数据流
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 读一下手机wifi状态下的ip地址,只有知道它的ip才能连接它嘛
*/
Toast.makeText(MainActivity.this, getLocalIpAddress(), Toast.LENGTH_SHORT).show(); startButton = (Button) findViewById(R.id.start_button);
portEditText = (EditText) findViewById(R.id.port_EditText);
receiveEditText = (EditText) findViewById(R.id.receive_EditText);
sendButton = (Button) findViewById(R.id.send_button);
sendEditText = (EditText) findViewById(R.id.message_EditText); startButton.setOnClickListener(startButtonListener);
sendButton.setOnClickListener(sendButtonListener);
}
/**
* 启动服务按钮监听事件
*/
private OnClickListener startButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
/**
* 启动服务器监听线程
*/
ServerSocket_thread serversocket_thread = new ServerSocket_thread();
serversocket_thread.start();
}
};
/**
* 服务器监听线程
*/
class ServerSocket_thread extends Thread
{
public void run()//重写Thread的run方法
{
try
{
int port =Integer.valueOf(portEditText.getText().toString());//获取portEditText中的端口号
serverSocket = new ServerSocket(port);//监听port端口,这个程序的通信端口就是port了
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
while (true)
{
try
{
//监听连接 ,如果无连接就会处于阻塞状态,一直在这等着
clicksSocket = serverSocket.accept();
inputstream = clicksSocket.getInputStream();//
//启动接收线程
Receive_Thread receive_Thread = new Receive_Thread();
receive_Thread.start();
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
*
* 接收线程
*
*/
class Receive_Thread extends Thread//继承Thread
{
public void run()//重写run方法
{
while (true)
{
try
{
final byte[] buf = new byte[1024];
final int len = inputstream.read(buf);
runOnUiThread(new Runnable()
{
public void run()
{
receiveEditText.setText(new String(buf,0,len));
}
});
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* 发送消息按钮事件
*/
private OnClickListener sendButtonListener = new OnClickListener() { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
try
{
//获取输出流
outputStream = clicksSocket.getOutputStream();
//发送数据
outputStream.write(sendEditText.getText().toString().getBytes());
//outputStream.write("0".getBytes());
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
/**
*
* 获取WIFI下ip地址
*/
private String getLocalIpAddress() {
WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
WifiInfo wifiInfo = wifiManager.getConnectionInfo();
// 获取32位整型IP地址
int ipAddress = wifiInfo.getIpAddress(); //返回整型地址转换成“*.*.*.*”地址
return String.format("%d.%d.%d.%d",
(ipAddress & 0xff), (ipAddress >> 8 & 0xff),
(ipAddress >> 16 & 0xff), (ipAddress >> 24 & 0xff));
}
}

,,,,,源码

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.Tcpserver"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="16"
android:targetSdkVersion="21" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

好了,一些提示,或者其它什么的亲们自己弄吧。可以看看我的android客服端的,我要吃饭去了

Android之TCP服务器编程的更多相关文章

  1. android 之TCP客户端编程

    补充,由于这篇文章是自己入门的时候写的,随着Android系统的升级可能有发送需要在任务 中进行,如有问题请百度 thread 或者看下面链接的文章 https://www.cnblogs.com/y ...

  2. c++游戏服务器编程学习笔记(一)TCP/IP

    1. c++游戏服务器编程c++运行效率非常高2. TCP传输控制协议IP网际协议Socket 3.Linux 乌班图开源第三方库BOOST 4.80%游戏服务器端用C++工作量最大的地方是具体的游戏 ...

  3. 服务器编程入门(11)TCP并发回射服务器实现 - 单线程select实现

    问题聚焦: 当客户端阻塞于从标准输入接收数据时,将读取不到别的途径发过来的必要信息,如TCP发过来的FIN标志. 因此,进程需要内核一旦发现进程指定的一个或多个IO条件就绪(即输入已准备好被读取,或者 ...

  4. 服务器编程入门(10)TCP回射服务器实现 - 并发

    问题聚焦:     在前面我们大概浏览了一下服务器编程需要掌握的一些知识和技术,以及架构思想.        实践,才是检验真理的唯一标准..从这节起我们将在这些技术的基础上,一步步实现以及完善一个服 ...

  5. 服务器编程入门(3)TCP协议详解

    问题聚焦:     本节从如下四个方面讨论TCP协议:     TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流     TCP状态转移过程:TCP连接的任意一 ...

  6. 服务器编程入门(1)TCP/IP协议族

    问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络 ...

  7. Linux 高性能服务器编程——TCP协议详解

    问题聚焦:     本节从如下四个方面讨论TCP协议:     TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流     TCP状态转移过程:TCP连接的任意一 ...

  8. Linux 高性能服务器编程——TCP/IP协议族

    1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输.     常用协议:ARP协议(地址解析协议),RARP协议 ...

  9. [置顶] Android之服务器编程

    这个教程主要是讲解服务器编程的,如果你的应用需要和服务器通信,那就必须了解服务器编程(当然,也许你不需要了解,因为你只开发客户端),Android应用和服务器的通信可以使用Http + JSON来通信 ...

随机推荐

  1. drupal7常用函数

    1.获取当前启用的管理员主题名称: $admin_theme = variable_get('admin_theme');

  2. Telephone dialer

    运行电话拨号器,需要加这个权限,否则不会打通电话.这个权限是用户权限,是谷歌工程师为了跟自己撇清关系,用户需要权限的时候自己加. 运行android程序的时候提示:ActivityManager: W ...

  3. Android事件总线(二)EventBus3.0源码解析

    1.构造函数 当我们要调用EventBus的功能时,比如注册或者发送事件,总会调用EventBus.getDefault()来获取EventBus实例: public static EventBus ...

  4. 通过url动态获取图片大小方法总结

    很多时候再项目中,我们往往需要先获取图片的大小再加载图片,但是某些特定场景,如用过cocos2d-js的人都知道,在它那里只能按比例缩放大小,是无法设置指定大小的图片的,这就是cocos2d-js 的 ...

  5. 【详细】【转】C#中理解委托和事件

    文章是很基础,但很实用,看了这篇文章,让我一下回到了2016年刚刚学委托的时候,故转之! 1.委托 委托类似于C++中的函数指针(一个指向内存位置的指针).委托是C#中类型安全的,可以订阅一个或多个具 ...

  6. 查看neighbors大小对K近邻分类算法预测准确度和泛化能力的影响

    代码: # -*- coding: utf-8 -*- """ Created on Thu Jul 12 09:36:49 2018 @author: zhen &qu ...

  7. C# 异步编程3 TPL Task 异步程序开发

    .Net在Framework4.0中增加了任务并行库,对开发人员来说利用多核多线程CPU环境变得更加简单,TPL正符合我们本系列的技术需求.因TPL涉及内容较多,且本系列文章为异步程序开发,所以本文并 ...

  8. 洗礼灵魂,修炼python(39)--面向对象编程(9)—魔法方法表

    好的,不多说,大招来了,几乎完整的魔法方法: 基本的魔法方法 Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Defi ...

  9. 利用RSACryptoServiceProvider进行RSA加密解密

    前言: 本文只介绍How to use,对于加密算法的研究不予讨论. 关于私钥的存储,微软给的建议是使用windows自带的秘钥容器,相见文档. 为了直观看到私钥和公钥,本文直接将其存入XML文件中. ...

  10. ccf-20171203 Crontab问题

    这题有如下几个点要注意: 1.最开始输出的开始时间和截止时间,这里是不包含截止时间的. 2.月份和星期的英文表示是大小写任意的,并未规定必须是Sat这种形式. 3.星期天的数字标识是0. 我的思路是, ...