这是一个android端操控服务器的例子  就是发送简单指令到服务器  然后服务器响应什么的...

当然这里是未完成的  只是简单展示一下大致思路

首先连接建立起来后  服务端给客户端一条信息  告诉服务已经建立  然后客户端可以发送指令到服务端

服务端在将处理的结果返回给客户端   没有使用到线程  因此必须是 客户端一句话 服务端一句话 这样交替进行

服务端

using System;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets; namespace SocketOne
{
class MyServer
{
static void Main(string[] args)
{
try
{
int port = ;
string host = "127.0.0.1";
IPAddress ip = IPAddress.Parse(host);
IPEndPoint ipe = new IPEndPoint(ip, port);
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类
s.Bind(ipe);//绑定8081端口
s.Listen();//开始监听
Console.WriteLine("Wait for connect");
Socket temp = s.Accept();//为新建连接创建新的Socket。
Console.WriteLine("Get a connect");
string recvStr = "";
string sendStr = ""; //接收传送信息的时候都是发送的byte数组
//首先向客户端发送信息
sendStr = "Connection set up";
//与java通信 后面加个\n 因为我的java用的是readline
byte[] bs = Encoding.ASCII.GetBytes(sendStr + "\n");
temp.Send(bs, bs.Length, );//返回客户端成功信息
int count = ; MyResponse myresponse=new MyResponse();
while (true)
{
Console.WriteLine("a loop starts count="+ (count++) +"==================");
//接收信息
int bytes;
byte[] recvBytes = new byte[];
bytes = temp.Receive(recvBytes, recvBytes.Length, );//从客户端接受信息
recvStr = Encoding.ASCII.GetString(recvBytes, , bytes);//
Console.WriteLine("Server Get Message:{0}", recvStr);//把客户端传来的信息显示出来 //经过我的处理后将信息返回给客户端
sendStr = myresponse.myresponse(recvStr);
Console.WriteLine("response is " + sendStr);
bs = Encoding.ASCII.GetBytes(sendStr + "\n");
temp.Send(bs, bs.Length, );//返回客户端成功信息
Console.WriteLine("this loop end"); }
//temp.Close();
//s.Close();
}
catch (ArgumentNullException e)
{
Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
Console.WriteLine("Press Enter to Exit");
Console.ReadLine();
}
}
}

android客户端(仅仅是说明一下概念和原理  所以东西不多 全部放在了 activity里面)

package mypackage.hello;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class Hello1Activity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initBtns();
connectToServer();
} Button btnAdd;
Button btnDel;
Button btnSearch; Socket socket;
BufferedReader in;
PrintWriter out;
String recvStr = null;
String sendStr = null; public void initBtns() {
btnAdd = (Button) findViewById(R.id.buttonAdd);
btnDel = (Button) findViewById(R.id.buttonDel);
btnSearch = (Button) findViewById(R.id.buttonSearch); btnAdd.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
try {
System.out.println("add clicked");
sendStr = "add,xxx,xxx,xxx";
out.println(sendStr); recvStr = in.readLine();
System.out.println("response is " + recvStr);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}); btnDel.setOnClickListener(new OnClickListener() { public void onClick(View v) {
try {
System.out.println("del clicked");
sendStr = "DEL,xxx";
out.println(sendStr); recvStr = in.readLine();
System.out.println("response is " + recvStr);
} catch (IOException e) {
e.printStackTrace();
}
}
}); btnSearch.setOnClickListener(new OnClickListener() { public void onClick(View v) {
try {
System.out.println("search clicked");
sendStr = "search,xxx";
out.println(sendStr); recvStr = in.readLine();
System.out.println("response is " + recvStr);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
}); } public void connectToServer() {
try {
// 同时 为了使程序拥有网络权限 在manifest中要有 <uses-permission
// android:name="android.permission.INTERNET" />
// 否则提示 permission denied
// 安卓模拟器将127.0.0.1默认为模拟器的本机地址 要得到计算机中真正的地址是 localhost/127.0.0.1 或者
// 10.0.0.2
socket = new Socket("10.0.2.2", 8081);
System.out.println("after socket");
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader line = new BufferedReader(new InputStreamReader(
System.in));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }

socket 通信 入门3 android 客户端 C# 服务端的更多相关文章

  1. Android BLE与终端通信(三)——客户端与服务端通信过程以及实现数据通信

    Android BLE与终端通信(三)--客户端与服务端通信过程以及实现数据通信 前面的终究只是小知识点,上不了台面,也只能算是起到一个科普的作用,而同步到实际的开发上去,今天就来延续前两篇实现蓝牙主 ...

  2. Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令.

    Python进阶----SOCKET套接字基础, 客户端与服务端通信, 执行远端命令. 一丶socket套接字 什么是socket套接字: ​ ​  ​ 专业理解: socket是应用层与TCP/IP ...

  3. Android客户端与服务端交互之登陆示例

    Android客户端与服务端交互之登陆示例 今天了解了一下android客户端与服务端是怎样交互的,发现其实跟web有点类似吧,然后网上找了大神的登陆示例,是基于IntentService的 1.后台 ...

  4. 二、网络编程-socket之TCP协议开发客户端和服务端通信

    知识点:之前讲的udp协议传输数据是不安全的,不可靠不稳定的,tcp协议传输数据安全可靠,因为它们的通讯机制是不一样的.udp是用户数据报传输,也就是直接丢一个数据包给另外一个程序,就好比寄信给别人, ...

  5. 用socket写一个简单的客户端和服务端程序

    用来练手写写socket代码 客户端代码 #include <stdio.h> #include <sys/types.h> #include <sys/socket.h ...

  6. 转-Android客户端和服务端如何使用Token和Session

    http://www.software8.co/wzjs/yidongkaifa/6407.html 对于初学者来说,对Token和Session的使用难免会限于困境,开发过程中知道有这个东西,但却不 ...

  7. 通过Socket实现TCP编程,用户登录之服务器相应客户端,客户端和服务端之间的通信

    服务器端: 1.创建ServerSocket对象,绑定监听端口: 2.通过accept()方法监听客户端请求: 3.建立连接后通过输入流读取客户端发送的请求信息; 4.通过输出流向客户端发送响应信息; ...

  8. Docker学习笔记 - Docker客户端和服务端

    学习内容: Docker客户端和服务端的通讯方式:client和自定义程序 Docker客户端和服务端的连接方式:socket 演示Docker客户端和服务端之间用remote-api通讯:nc   ...

  9. linux epoll机制对TCP 客户端和服务端的监听C代码通用框架实现

    1 TCP简介 tcp是一种基于流的应用层协议,其“可靠的数据传输”实现的原理就是,“拥塞控制”的滑动窗口机制,该机制包含的算法主要有“慢启动”,“拥塞避免”,“快速重传”. 2 TCP socket ...

随机推荐

  1. SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled

    SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled 今天是2013-09-17,在今天学习sql ...

  2. 使用 Eclipse Memory Analyzer 进行堆转储文件分析

    Eclipse Memory Analyzer(MAT)是著名的跨平台集成开发环境 Eclipse Galileo 版本的 33 个组成项目中之一,它是一个功能丰富的 JAVA 堆转储文件分析工具,可 ...

  3. JavaScript之arguments.callee

    arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函数,没有名子,无名可调. 这时就可以用argumen ...

  4. textarea中的空格与换行

    当在一个textarea标签中键入一个回车时,实际上会插入2个符号:\n\r在javascript里, line breaks用\n表示when you pull text into Javascri ...

  5. java简易编辑器

    package peng_jun; import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swi ...

  6. codeforces 630P. Area of a Star

    题目链接 圆上n个点等距离分布, 求构成的星星的面积. 我们可以求三角形OAB的面积, ∠CAE = 1/2 ∠ COE = PI/n, 那么∠CAO = PI/2n, ∠AOB非常好求, 就是PI/ ...

  7. Tensorflow的CNN教程解析

    之前的博客我们已经对RNN模型有了个粗略的了解.作为一个时序性模型,RNN的强大不需要我在这里重复了.今天,让我们来看看除了RNN外另一个特殊的,同时也是广为人知的强大的神经网络模型,即CNN模型.今 ...

  8. 64位WINDOWS系统环境下应用软件开发的兼容性问题(CPU 注册表 目录)

    应用软件开发的64 位WINDOWS 系统环境兼容性 1. 64 位CPU 硬件 目前的64位CPU分为两类:x64和IA64.x64的全称是x86-64,从名字上也可以看出来它和 x86是兼容的,原 ...

  9. CCNA实验(8) -- PPP & HDLC

    HDLC帧格式与以太帧格式有很大差别,HDLC帧没有源MAC和目的MAC地址.HDLC不能提供验证,缺少对链路保护.Cisco设备与Cisco设备连接,可用HDLC封装.Cisco设备与非Cisco设 ...

  10. 害人的VS2008,manifest导致“应用程序配置不正确,应用程序未能启动”

    在VC++2008的项目中,如何显示地指定要使用的C++库的版本? 开发环境:VS2008 SP1 + Win2003 SP2         因为我的VS2008安装了SP1补丁,所以有了9.0.3 ...