电脑上不了网,谷歌浏览器出错说DNS出错,IP地址那些也不知道改什么,我就选自动的了,还是上不了网,求解

怎样用vc实现pc机之间的串口通信
应用VC的MFC类基本对话框的MSComm控件来实现,要求有通信协议,用RS_232即可,PC机对话框界面上显示接收框和发送框,按发送按钮可以成功实现发送数据给串口,按接收按钮从串口返回接收的数据
09-05-22 &
工业控制领域(如DCS系统),经常涉及到串行通信问题。为了实现微机和单片机之间的数据交换,人们用各种不同方法实现串行通信,如DOS下采用汇编语言或C语言,但在Windows 环境下却存在一些困难和不足。在Windows操作系统已经占据统治地位的情况 下(何况有些系统根本不支持DOS如Windows2000)开发Windows 环境下串行通信技术就显得日益重要。VC++6.0是微软公司于1998年推出的一种开发环境,以其强大的功能,友好的界面,32位面向对象的程序设计及Active X的灵活性而受广大软件开发者的青睐,被广泛应用于各个领域。应用VC++开发串行通信目前通常有如下几种方法:一是利用Windows API通信函数;二是利用VC的标准通信函数inp、inpw、inpd、outp、outpw、outpd等直接对串口进行操作;三是使用Microsoft Visual C++的通信控件(MSComm);四是利用第三方编写的通信类。以上几种方法中第一种使用面较广,但由于比较复杂,专业化程度较高,使用较困难;第二种需要了解硬件电路结构原理;第三种方法看来较简单,只需要对串口进行简单配置,但是由于使用令人费解的VARIANT 类,使用也不是很容 易;第四种方法是利用一种用于串行通信的CSerial类(这种类是由第三方提供),只要理解这种类的几个成员函数,就能方便的使 用。笔者利用CSerial类很方便地实现了在固定式EBM气溶胶灭火系统分区启动器(单片机系统)与上位机的通信。以下将结合实例,给出实现串行通信的几种方法。 1 Windows API通信函数方法  与通信有关的Windows API函数共有26个,但主要有关的有:CreateFile() 用 “comn”(n为串口号)作为文件名就可以打开串口。ReadFile() 读串口。WriteFile() 写串口。CloseHandle() 关闭串口句柄。  初始化时应注意CreateFile()函数中串口共享方式应设为0,串口为不可共享设备,其它与一般文件读写类似。以下给出API实现的源代码。1.1 发送的例程//声明全局变量HANDLE m_hIDComDev;OVERLAPPED m_OverlappedRead, m_Over lappedW//初始化串口void CSerialAPIView::OnInitialUpdate(){CView::OnInitialUpdate();Char szComParams[50];DCBMemset(&m_OverlappedRead, 0, sizeof (OVERLAPPED));Memset(&m_OverlappedWrite, 0, sizeof (OVERLAPPED));m_hIDComDev = NULL;m_hIDComDev = CreateFile(“COM2”, GENERIC_READ│GENERIC_WRITE, 0, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL│FILE_FLAG_OVERLAPPED, NULL);if (m_hIDComDev == NULL){AfxMessageBox(“Can not open serial port!”);}memset(&m_OverlappedRead, 0, sizeof (OVERLAPPED));memset(&m_OverlappedWrite, 0, sizeof (OVERLAPPED));COMMTIMEOUTS CommTimeOCommTimeOuts.ReadIntervalTimeout=0×FFFFFFFF;CommTimeOuts.ReadTotalTimeoutMultiplier = 0;CommTimeOuts.ReadTotalTimeoutConstant = 0;CommTimeOuts.WriteTotalTimeoutMultiplier = 0;CommTimeOuts.WriteTotalTimeoutConstant = 5000;SetCommTimeouts(m_hIDComDev, &CommTimeOuts);Wsprintf(szComparams, “COM2:9600, n, 8, 1”);m_OverlappedRead. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);m_OverlappedWrite. hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);dcb. DCBlength = sizeof(DCB);GetCommState(m_hIDComDev, &dcb);dcb. BaudRate = 9600;dcb. ByteSize= 8;unsigned char ucSucSet = (unsigned char) ((FC_RTSCTS&FC_DTRDSR) != 0);ucSet = (unsigned char) ((FC_RTSCTS&FC_RTSCTS) ! = 0);ucSet = (unsigned char) ((FC_RTSCTS&FC_XONXOFF) ! = 0);if (!SetCommState(m_hIDComDev, &dcb)‖!SetupComm(m_hIDComDev,)‖m_OverlappedRead. hEvent ==NULL‖m_OverlappedWrite. hEvent ==NULL){DWORD dwError = GetLastError();if (m_OverlappedRead. hEvent != NULL)CloseHandle(m_OverlappedRead. hEvent);if (m_OverlappedWrite. hEvent != NULL)CloseHandle(m_OverlappedWrite. hEvent);CloseHandle(m_hIDComDev);}endd:;}//发送数据void CSerialAPIView::OnSend(){char szMessage[20] = “thank you very much”;DWORD dwBytesWfor (int i=0; i&sizeof(szMessage); i++){WriteFile(m_hIDComDev, (LPSTR)&szMessage[i], 1, &dwBytesWritten, &m_OverlappedWrite);if (WaitForSingleObject(m_OverlapperWrite, hEvent, 1000))dwBytesWritten = 0;else{GentOverlappedResult(m_hIDComDev, &m_OverlappedWrite, &dwBytesWritten, FALSE);m_OverlappedWrite. Offset += dwBytesW}dwBytesWritten++;}}1.2 接收例程DCB ComD //设备控制块HANDLE hC //global handlehCom = CreateFile (&COM1&,GENERIC_READ| GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hCom==INVALID_HANDLE_VALUE){AfxMessageBox(&无法打开串行口&);}else{COMMTIMEOUTS CommTimeOSetCommMask(hCom, EV_RXCHAR ) ;SetupComm(hCom,
) ; /*设置收发缓冲区 尺寸为4K */PurgeComm(hCom, PURGE_TXABORT| PURGE_RXABORT | PURGE_TXCLEAR| PURGE_RXCLEAR ) ; //清收发缓冲区//以下初始化结构变量CommTimeOuts, 设置超时参数 CommTimeOuts.ReadIntervalTimeout = 0×FFFFFFFF ;CommTimeOuts.ReadTotalTimeoutMultiplier = 0;CommTimeOuts.ReadTotalTimeoutConstant = 4000;CommTimeOuts.WriteTotalTimeoutMultiplier = 0;CommTimeOuts.WriteTotalTimeoutConstant = 4000;SetCommTimeouts(hCom, &CommTimeOuts ); //设置超时参数ComDcb.DCBlength = sizeof( DCB );GetCommState( hCom, &ComDcb ); //获取当前参数ComDcb.BaudRate =9600; //波特率ComDcb.ByteSize = 8; //数据位ComDcb.Parity = 0; /*校验 0~4=no, odd, even, mark, space */SetCommState(hCom, &ComDcb ) ;} //设置新的通信参数 接收可用定时器或线程等DWORD dRead,dReadNunsigned char buff [200];dRead=ReadFile(hCom, buff, 100, &dReadNum, NULL); //接收100个字符,//dReadNum为实际接收字节数2 利用端口函数直接操作这种方式主要是采用两个端口函数_inp(), _outp()实现对串口的读写,其中读端口函数的原型为:int _inp(unsigned shot port)该函数从端口读取一个字节,端口号为0~65535。写端口的函数原型为:int _outp(unsigned shot port, int databyte)该函数向指定端口写入一个字节。  不同的计算机串口地址可能不一样,通过向串口的控制及收发寄存器进行读写,可以实现灵活的串口通信功能,由于涉及具体的硬 件电路讨论比较复杂,在此不加赘述。3 MSComm控件  MSComm控件是微软开发的专用通信控件,封装了串口的所有功能,使用很方便,但在实际应用中要小心对其属性进行配置。下面详细说明该类应用方法。3.1 MSComm控件的属性CommPort:设置串口号,类型 short :1-comm1 2-comm2.Settings:设置串口通信参数,类型 CString :B波特率,P奇偶性(N无校验,E偶校验,O奇校验),D字节有效位数,S停止位。PortOpen:设置或返回串口状态,类型 BOOL:TURE打开,FALSE关闭。InputMode:设置从接收缓冲区读取数据的格式,类型 long: 0-Text 1-Bin。Input:从接收缓冲区读取数据,类型 VARIANT。InBufferCount:接收缓冲区中的字节数,类型:short。InBufferSize:接收缓冲区的大小,类型:short。Output:向发送缓冲区写入数据,类型:VARIANT。OutBufferCount:发送缓冲区中的字节数,类型:short。OutBufferSize:发送缓冲区的大小,类型:short。InputLen:设置或返回Input读出的字节数,类型:short。CommEvent:串口事件,类型:short。3.2 程序示例串口初始化if (!m_comm.GetPortOpen())m_comm.SetPortOpen(TURE); /*打开串口*/m_comm.SetSettings(&4800,n,8,1&); /*串口参数设置*/m_comm.SetInputMode(0); /*设置TEXT缓冲区输入方式*/m_comm.SetRthresHold(1); /*每接收一个字符则激发OnComm()事件*/接收数据m_comm.SetInputLen(1); /*每次读取一个字符VARINAT V1=m_comm.GetInput();/*读入字符*/m_V1=V1.发送字符m_comm.SetOutput(Colevariant (&Hello&); /*发送 “Hello” */3.3 注意  SetOutput方法可以传输文本数据或二进制数据。用SetOutput方法传输文本数据,必须定义一个包含一个字符串的Variant。发送二进制数据,必须传递一个包含字节数组的Variant 到 Output 属性。正常情况下,如果发送一个 ANSI 字符串到应用程序,可以以文本数据的形式发送。如果发送包含嵌入控制字符、Null 字符等的数据,要以二进制形式发送。此处望引起读者注意,笔者曾经在此犯错。4 VC++类CSerial4.1 串行通信类CSerial简介Cserial 是由MuMega Technologies公司提供的一个免费的VC++类,可方便地实现串行通信。以下为该类定义的说明部分。class CSerial{public:CSerial();~CSerial();BOOL Open( int nPort = 2, int nBaud = 9600 );BOOL Close( void );int ReadData( void *, int );int SendData( const char *, int );int ReadDataWaiting( void );BOOL IsOpened( void ){ return( m_bOpened ); }protected:BOOL WriteCommByte( unsigned char );HANDLE m_hIDComDOVERLAPPED m_OverlappedRead, m_OverlappedWBOOL m_bO}4.2 串行通信类Cserial 成员函数简介1. CSerial::Cserial是类构造函数,不带参数,负责初始化所有类成员变量。2. CSerial:: Open这个成员函数打开通信端口。带两个参数,第一个是埠号,有效值是1到4,第二个参数是波特率,返回一个布尔量。3. CSerial:: Close函数关闭通信端口。类析构函数调用这个函数,所以可不用显式调用这个函数。4. CSerial:: SendData函数把数据从一个缓冲区写到串行端口。它所带的第一个参数是缓冲区指针,其中包含要被发送的资料;这个函数返回已写到端口的实际字节数。5. CSerial:: ReadDataWaiting函数返回等待在通信端口缓冲区中的数据,不带参数。 6. CSerial:: ReadData函数从端口接收缓冲区读入数据。第一个参数是void*缓冲区指针,资料将被放入该缓冲区;第二个参数是个整数值,给出缓冲区的大小。4.3 应用VC类的一个实例1. 固定式EBM气溶胶灭火系统简介   固定式EBM气溶胶灭火装置分区启动器是专为EBM灭火装置设计的自动控制设备。可与两线制感温、感烟探测器配套使用,当监测部位发生火情时,探测器发出电信号给分区启动器,经逻辑判断后发出声、光报警,延时后自动启动EBM灭火装置。为了便于火灾事故的事后分析,需对重要的火警事件和关键性操作进行记录,记录应能从PC机读出来;PC机能控制、协调整个系统的工作,这些都涉及通信。本例中启动器采用RS-485通信接口,系统为主从式网络,PC机为上位机。具体的通信协议为:(1)下位机定时向上传送记录的事件;(2)应答发送,即PC机要得到最新事件记录,而传送时间未到时,PC机发送命令,下位机接收命令后,把最新记录传给上位机;(3)上位机发送其它命令如校时、启动、停止、手/自动等。2. 通信程序设计部分上位机程序(1)发送命令字程序,代码如下void CCommDlg::OnSend(){CSerial S//构造串口类,初始化串行口if (Serial.Open(2,9600)) //if-1//打开串行口2,波特率为9600bps{static char szMessage[]=&0&;//命令码(可定义各种命令码)int nBytesSint count=0;resend:nBytesSent=Serial.SendData(szMessage,strlen(szMessage));//发送命令码char rdMessage [20];if (Serial.ReadDataWaiting()) //if-2{Serial.ReadData(rdMessage,88);//rdMessage 定义接收字节存储区,为全局变量//if ((rdMessage[0]!=0x7f)&&(count&3)){count++;goto resend}if(count&=3)MessageBox(“发送命令字失败”);}else //if-2MessageBox(&接收数据错误&);}else //if-1MessageBox(&串行口打开失败&);}下位机通信程序:#include&reg51.h&#include&stdlib.h&#include&stdio.h&#define count 9#define com_code 0x00#define com_code1 0xffunsigned char buffer[count];int po,year,month,date,int minute,second,recordID ;main(){…/*初始化串口和定时器*/TMOD=0×20;TH1=0×TR1=0×01;ET1=0×00;ES=1;EA=1;/*待发送数据送缓冲区*/buffer[0] = 0× //数据特征码buffer[1] = count+1; //数据长度buffer[2] = year; //年buffer[3] = //月buffer[4] = //日buffer[5] = //时buffer[6] = //分buffer[7] = //秒buffer[8] = recordID; //事件号for(po=0;po&po++)sum+=buffer[po];buffer[9]= //校验和…}/*发送中断服务程序*/void send(void) interrupt 4 using 1{RI=0;EA=0;do{for(i=0;i&=i++){SBUF=buffer[i]; //发送数据和校验和//while(TI==0);TI=0;}while(RI==0);RI=0;} while(SBUF!=0); //主机接收不正确,重新发送//EA=1;R}5 应用总结  根据不同需要,选择合适的方法。我们选用的用VC++类实现的上位机和下位机的串行通信方法具有使用简单、编写程序方便的特点。经过半年多应用于EBM灭火系统的情况来看,该方法实现的系统运行稳定可靠,是一种值得推广的简单易行的通信方法。
请登录后再发表评论!
最便宜的回路校验仪?性价比高的回路校验仪?最便宜的电压电流校验仪?性价比高的电压电流校验仪?JY310系列 回路校验仪 电流电压校验仪〔劲仪官方网站:〕体积超小、屏幕超大、功能强大、还是触摸屏+锂电......技术指标:相关图片:
请登录后再发表评论!android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序 - 路还很长 - ITeye技术网站
在本机上启动两个模拟器,本机(PC)和模拟器的信息如下:
大家可以看到,两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。
获取模拟器名称:
&adb devices
List of devices attached
emulator-5554 device
emulator-5556 device
模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本机的IP地址127.0.0.1 。所以,通过此特殊IP地址,实现PC本机与模拟器的通信是没有问题。
【PC-SERVER / 模拟器-CLIENT】
目的:通过7100端口跟服务器进行通信。
实施方法比较简单,直接按照下面的方法就可以了。
PC-SERVER:ServerSocket server = new ServerSocket(7100);
模拟器-CLIENT:Socket socket = new Socket("192.168.1.3", 7100);
PC-SERVER:ServerSocket server = new ServerSocket(7100);
模拟器-CLIENT:Socket socket = new Socket("10.0.2.2", 7100);
【模拟器-SERVER / PC-CLIENT】
目的:连接到服务器的7100端口。
实施操作稍微复杂一些,不能按照前面的方法来进行。要达到此目的,先要进行端口映射。
把本机端口TCP/6100映射到模拟器TCP/7100端口(UDP也是一样)。
&adb –s emulator-5554 forward tcp:6100 tcp:7100
端口映射成功后,再进行下面的实验。
方法1(正确):
模拟器-SERVER:ServerSocket server = new ServerSocket(7100);
PC-CLIENT:Socket socket = new Socket("127.0.0.1", 6100);
方法2(错误):
模拟器-SERVER:ServerSocket server = new ServerSocket(7100);
PC-CLIENT:Socket socket = new Socket("192.168.1.3", 6100);
错误原因是127.0.0.1是本机环路IP,跟本机IP没有映射关系,所以发送到本机IP的连接请求,无法映射到127.0.0.1的环路IP上。
由于这个原因,两台PC机上的模拟器之间,是无法进行网络连接的。如果要实现连接,只能在作为服务器的PC上,运行一个用于数据中继的后台程序,进行数据的转发。
【模拟器(5554)-SERVER / 模拟器(5556)-CLIENT】
目的:模拟器(5556)连接到模拟器(5554)的7100端口。
实施操作也相对复杂一些。要达到此目的,也要先进行端口映射。
把本机端口TCP/6100映射到模拟器(5554)TCP/7100端口(UDP也是一样)。
&adb –s emulator-5554 forward tcp:6100 tcp:7100
端口映射成功后,再进行下面的实验。
方法1(正确):
模拟器(5554)-SERVER:ServerSocket server = new ServerSocket(7100);
模拟器(5556)-CLIENT:Socket socket = new Socket("10.0.2.2", 6100);
原理说明:
模拟器(5556)通过连接10.0.2.2:6100,相当于连接本机(PC)的127.0.0.1:6100,由于本机IP的6100端口进行过端口映射,映射到模拟器(5554)的7100端口。所以,来自模拟器(5556)的连接请求会发送到模拟器(5554)上。实现了两个模拟器之间的网络通信功能。
此方法在本机调试时非常有用。
方法2(错误):
模拟器(5554)-SERVER:ServerSocket server = new ServerSocket(7100);
模拟器(5556)-CLIENT:Socket socket = new Socket("192.168.1.3", 6100);
错误原因跟【PC-CLIENT / 模拟器-SERVER】的方法2一样。
Android模拟器Ping主机
众所周之Android模拟器采用的是Qemu,而整个模拟的内核是Linux,虽然没有x-windows界面和bash shell,但测试下基本的Linux Shell还是没有问题的,今天就在android emulator上玩回ping。
首先我们进入cmd或console状态下,使用cd命令进入Android SDK的Tools命令,可以输入adb shell这时候,这个时候从&变为了#,现在已经在linux shell中了,虽然Android平台没有vi这样的编辑器,但是执行些简单的命令比如cd、rmdir、mkdir还是没有问题,我们直接在Android模拟器中测试ping本机,如# ping localhost,看看返回如图:
[环境相关] 安卓模拟器ping局域网中的其他机器
获取android模拟器ip
public String getLocalIpAddress() {
for (Enumeration&NetworkInterface& en =NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){
NetworkInterface intf = en.nextElement();
for (Enumeration&InetAddress& enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();){
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
} catch (SocketException ex) {
edit_show.append(ex.toString()+"\n");
浏览: 128664 次
来自: 广西
问下,我本机有个html5的应用,我手机连在同一个无线路由器上 ...
看到那个引用信息了,但是没看懂,谢谢!
唉 jrebel.jar提示过期了
不错,我转了,以前对这个不懂搞了三天都没弄好啊,谢谢你了,支 ...
可是我的没有设置&Maximum version&q ...用Android模拟器如何与本地服务器(PC)进行连接通信
网络通信都要用到套接字socket,用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket和ServerSocket类库位于java
.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
下面以模拟器作为客户端,以PC为服务器端,进行连接通信和数据交换:
特别需要注意的是,Android模拟器有一个固定的本地IP--10.0.2.2,在用套接字建立通讯时,必须使用这个IP,而不是PC的IP或者是localhost。
首先创建android模拟器客户端:
/res/values/string.xml
&?xml version="1.0"
encoding="utf-8"?&&
&resources&&
&string name="hello"&Hello World,
Socket_Android!&/string&&
name="app_name"&Socket_Android&/string&&
name="TextView01"&这里显示接受到服务器发来的信息&/string&&
name="Button01"&测试连接&/string&&
name="EditText01"&请输入内容&/string&&
&/resources&
/res/layout/main.xml
&?xml version="1.0"
encoding="utf-8"?&&
&LinearLayout xmlns:android=""&
android:orientation="vertical"&
android:layout_width="fill_parent"&
android:layout_height="fill_parent"&
&TextView&&&&
android:layout_width="fill_parent"&&&
android:layout_height="wrap_content"&&&
android:text="@string/hello"&
&TextView&&&
&&&&&&&&&&&&
android:layout_width="fill_parent"&&&
&&&&&&&&&&&&
android:layout_height="wrap_content"&&&
&&&&&&&&&&&&
android:text="@string/TextView01"
&&&&&&&&&&&&
android:id="@+id/TextView01"
&&&&&&&&&&&&&&
&&&&&&&&&&&
&EditText&&&
&&&&&&&&&&&
android:layout_width="fill_parent"&
&&&&&&&&&&&
android:layout_height="wrap_content"&
&&&&&&&&&&&
android:text="@string/EditText01"
&&&&&&&&&&&
android:id="@+id/EditText01"
&&&&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
android:id="@+id/Button01"&
&&&&&&&&&&&
android:layout_width="fill_parent"&
&&&&&&&&&&&
android:layout_height="wrap_content"&
&&&&&&&&&&&
android:text="@string/Button01"
&&&&&&&&&&&
android:id="@+id/tx"&
&&&&&&&&&&&
android:layout_width="fill_parent"&
&&&&&&&&&&&
android:layout_height="wrap_content"/&&
&/LinearLayout&&
package com.
import java.io.BufferedR
import java.io.BufferedW
import java.io.InputStreamR
import java.io.OutputStreamW
import java.io.PrintW
import java.net.InetA
import java.net.ServerS
import java.net.S
import android.app.A
import android.os.B
import android.util.L
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
import android.widget.TextV
public class TestClientActivity extends Activity {
&private TextView mTextView =
&private EditText mEditText =
&private TextView tx1 =
&public& static final
String& IP="10.0.2.2";
//与服务端连接的端口
&public& static final
int& PORT= 51706;
&private Button mbutton =
&@Override
&public void onCreate(Bundle savedInstanceState)
&&super.onCreate(savedInstanceState);
&&setContentView(R.layout.main);
&&mbutton = (Button)
findViewById(R.id.Button01);
&&mEditText = (EditText)
findViewById(R.id.EditText01);
&&mTextView = (TextView)
findViewById(R.id.TextView01);
&&tx1 = (TextView)
findViewById(R.id.tx);
&&mbutton.setOnClickListener(new
OnClickListener() {
&&&public void
onClick(View v) {
&&&&setTitle("android
&&&&Socket&
&&&&&InetAddress
serverAddr = InetAddress.getByName(IP);
&&&&&socket
= new Socket(serverAddr,PORT);
将信息通过这个对象来发送给Server&&
&&&&&&&&&&&&&&&&&&&
PrintWriter out = new PrintWriter(new
BufferedWriter(&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
OutputStreamWriter(socket.getOutputStream())),&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&
//接受服务器信息&&
&&&&&&&&&&&&&&&&&&&&
BufferedReader in = new
BufferedReader(&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
InputStreamReader(socket.getInputStream()));&&
&&&&&&&&&&&&&&&&&&&&
//得到服务器信息&&
&&&&&&&&&&&&&&&&&&&&
String msg =
in.readLine();&&
&&&&&&&&&&&&&&&&&&&&
//在页面上进行显示&&
&&&&&&&&&&&&&&&&&&&&
tx1.setText(msg);&&
&&&&&&&&&&&&&&&&&&&&
String& clientMsg ="";
&&&&&&&&&&&&&&&&&&&&
clientMsg = mEditText.getText().toString();
&&&&&&&&&&&&&&&&&&&&
out.write(clientMsg);
&&&&&&&&&&&&&&&&&&&
//out.println(msg);&&
&&&&&&&&&&&&&&&&&&&
out.flush();&&
&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
} catch (Exception e) {&&
&&&&&&&&&&&&&&&&&&&
Log.e("TCP", "S: Error",
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
&&socket.close();
&&&&&&&&&&&&&&&
&}catch(Exception& e){
&&&&&&&&&&&&&&&
&&e.printStackTrace();
&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&
下面是建立在PC上的服务器端源代码:
import java.io.BufferedR
import java.io.BufferedW
import java.io.F
import java.io.FileOutputS
import java.io.InputStreamR
import java.io.OutputStreamW
import java.io.PrintW
import java.net.ServerS
import java.net.S
public class Server implements Runnable {
&public static final String SERVERIP =
"10.0.2.2";
&public static final int SERVERPORT = 51706;
&String str ="";
&public void run() {
&&&System.out.println("S:
Connecting...");
&&&ServerSocket
serverSocket = new ServerSocket(SERVERPORT);
&&&while (true)
等待接受客户端请求
&&&&Socket
client = serverSocket.accept();
&&&&System.out.println("S:
Receiving...");
接受客户端信息
&&&&&BufferedReader
in = new BufferedReader(
&&&&&&&new
InputStreamReader(client.getInputStream()));
&&&&&PrintWriter
out = new PrintWriter(new BufferedWriter(
&&&&&&&new
OutputStreamWriter(client.getOutputStream())),
&&&&&&&true);
设置返回信息
&&&&&out.println("my
name is server");
&&&&&out.flush();
=str+"\n" + in.readLine();
//通信记录保存在文件中
file = new File("F:\\DB/file/android.txt");
&&&&&FileOutputStream
fops = new FileOutputStream(file);
&&&&&byte[]
b = str.getBytes();
(int i = 0; i & b.length - 1; i++) {
&&&&&&fops.write(b[i]);
&&&&&&System.out.println(b.toString());
&&&&&System.out.println("S:
Received: '" + str + "'");
catch (Exception e) {
&&&&&System.out.println("S:
&&&&&e.printStackTrace();
&&&&&client.close();
&&&&&System.out.println("S:
&&} catch (Exception e) {
&&&System.out.println("S:
&&&e.printStackTrace();
&public static void main(String[] args) {
&&Thread desktopServerThread =
new Thread(new Server());
&&desktopServerThread.start();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 ie浏览器出错 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信