简单的socket通信(怎样使用socket来实现简单的点对点通信)

2024-07-20 12:47:38 13

简单的socket通信(怎样使用socket来实现简单的点对点通信)

本文目录

怎样使用socket来实现简单的点对点通信

要用android实现点对点通信,可以使用socket完成,使用socket需要知道对方的IP地址以及端口号,这里我省略了服务器端(编写正规的通信软件还是得需要服务器做中转,用服务器得知A的IP地址,然后让A做服务器端,B用A的Ip地址去获取数据),只是展示相关原理,首先看服务器端 1 package polly.liu; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.net.InetAddress; 7 import java.net.NetworkInterface; 8 import java.net.ServerSocket; 9 import java.net.Socket;10 import java.net.SocketException;11 import java.util.Enumeration;12 13 import android.app.Activity;14 import android.os.Bundle;15 import android.os.Handler;16 import android.util.Log;17 import android.widget.TextView;18 19 import java.io.BufferedReader;20 import java.io.IOException;21 import java.io.InputStreamReader;22 import java.net.ServerSocket;23 import java.net.Socket;24 import android.app.Activity;25 import android.os.Bundle;26 import android.os.Handler;27 import android.os.Message;28 import android.widget.TextView;29 30 public class ServerActivity extends Activity {31 ServerSocket ss = null;32 String mClientMsg = "";33 Thread myCommsThread = null;34 protected static final int MSG_ID = 0x1337;35 public static final int SERVERPORT = 6000;36 37 @Override38 public void onCreate(Bundle savedInstanceState) {39 super.onCreate(savedInstanceState);40 setContentView(R.layout.main);41 TextView tv = (TextView) findViewById(R.id.TextView01);42 tv.setText("Nothing from client yet");43 this.myCommsThread = new Thread(new CommsThread());44 this.myCommsThread.start();45 }46 47 @Override48 protected void onStop() {49 super.onStop();50 try {51 // 确保你退出时要关闭socket连接52 ss.close();53 } catch (IOException e) {54 e.printStackTrace();55 }56 }57 58 Handler myUpdateHandler = new Handler() {59 public void handleMessage(Message msg) {60 switch (msg.what) {61 case MSG_ID:62 TextView tv = (TextView) findViewById(R.id.TextView01);63 tv.setText(mClientMsg);64 break;65 default:66 break;67 }68 super.handleMessage(msg);69 }70 };71 class CommsThread implements Runnable {72 public void run() {73 Socket s = null;74 try {75 ss = new ServerSocket(SERVERPORT );76 } catch (IOException e) {77 e.printStackTrace();78 }79 while (!Thread.currentThread().isInterrupted()) {80 Message m = new Message();81 m.what = MSG_ID;82 try {83 if (s == null)84 s = ss.accept();85 BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));86 String st = null;87 st = input.readLine();88 mClientMsg = st;89 myUpdateHandler.sendMessage(m);90 } catch (IOException e) {91 e.printStackTrace();92 }93 }94 }95 }96 } 服务器端和平时在PC上的代码差不多,只不过现在把在PC上的代码转到了手机端,注意耗时间的操作要放在子线程上去做,再来看看客户端代码: 1 package polly.liu; 2 3 import java.io.BufferedWriter; 4 import java.io.IOException; 5 import java.io.OutputStreamWriter; 6 import java.io.PrintWriter; 7 import java.net.InetAddress; 8 import java.net.Socket; 9 import java.net.UnknownHostException;10 11 import android.app.Activity;12 import android.os.Bundle;13 import android.util.Log;14 import android.view.View.OnClickListener;15 import android.widget.Button;16 import android.widget.EditText;17 import android.widget.TextView;18 import android.view.View;19 20 public class ClientActivity extends Activity {21 private Button bt;22 private TextView tv;23 private Socket socket;24 private String serverIpAddress = "192.168.1.104";25 26 private static final int REDIRECTED_SERVERPORT = 6000;27 @Override28 public void onCreate(Bundle savedInstanceState) {29 super.onCreate(savedInstanceState);30 setContentView(R.layout.main);31 bt = (Button) findViewById(R.id.myButton);32 tv = (TextView) findViewById(R.id.myTextView);33 try {34 InetAddress serverAddr = InetAddress.getByName(serverIpAddress);35 socket = new Socket(serverAddr, REDIRECTED_SERVERPORT);36 } catch (UnknownHostException e1) {37 e1.printStackTrace();38 } catch (IOException e1) {39 e1.printStackTrace();40 }41 bt.setOnClickListener(new OnClickListener() {42 public void onClick(View v) {43 try {44 EditText et = (EditText) findViewById(R.id.EditText01);45 String str = et.getText().toString();46 PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);47 out.println(str);48 Log.d("Client", "Client sent message");49 } catch (UnknownHostException e) {50 tv.setText("Error1");51 e.printStackTrace();52 } catch (IOException e) {53 tv.setText("Error2");54 e.printStackTrace();55 } catch (Exception e) {56 tv.setText("Error3");57 e.printStackTrace();58 }59 }60 });61 }62 }通过以上的学习,大家可以系统的整理一下具体的操作流程,达内科技是您永远的老师和朋友,如果您还有其他疑问也可以随时关注我们的网页更新内容,达内有很多的信息愿与大家共享。

一个最简单的Socket通信例子

  所谓socket通常也称作 套接字 用于描述IP地址和端口 是一个通信链的句柄 应用程序通常通过 套接字 向网络发出请求或者应答网络请求         Socket和ServerSocket类库位于包中 ServerSocket用于服务器端 Socket是建立网络连接时使用的 在连接成功时 应用程序两端都会产生一个Socket实例 操作这个实例 完成所需的会话 对于一个网络连接来说 套接字是平等的 并没有差别 不因为在服务器端或在客户端而产生不同级别 不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的

  下面给出一个最简单的Socket通信的例子供初学者参考  

  服务器端 ServerDemo java

  

  package lanber socket;

  import java io DataInputStream;import java io DataOutputStream;import java io IOException;import ServerSocket;import Socket;

  public class ServerDemo {

  /**     * 注意 Socket的发送与接收是需要同步进行的 即客户端发送一条信息 服务器必需先接收这条信息      *      而后才可以向客户端发送信息 否则将会有运行时出错      * @param args     */    public static void main(String args) {        ServerSocket ss = null;        try {            ss = new ServerSocket( );            //服务器接收到客户端的数据后 创建与此客户端对话的Socket            Socket socket = ss accept();            //用于向客户端发送数据的输出流            DataOutputStream dos = new DataOutputStream(socket getOutputStream());            //用于接收客户端发来的数据的输入流            DataInputStream dis = new DataInputStream(socket getInputStream());            System out println( 服务器接收到客户端的连接请求 + dis readUTF());            //服务器向客户端发送连接成功确认信息            dos writeUTF( 接受连接请求 连接成功! );            //不需要继续使用此连接时 关闭连接            socket close();            ss close();        } catch (IOException e) {            e printStackTrace();        }    }

  客户端 ClientDemo java

  

  package lanber socket;

  import java io DataInputStream;import java io DataOutputStream;import java io IOException;import java io OutputStream;import Socket;import UnknownHostException;

  public class ClientDemo {

  /**     * @param args     */    public static void main(String args) {        Socket socket = null;        try {            socket = new Socket( localhost );            //获取输出流 用于客户端向服务器端发送数据            DataOutputStream dos = new DataOutputStream(socket getOutputStream());            //获取输入流 用于接收服务器端发送来的数据            DataInputStream dis = new DataInputStream(socket getInputStream());            //客户端向服务器端发送数据            dos writeUTF( 我是客户端 请求连接! );            //打印出从服务器端接收到的数据            System out println(dis readUTF());            //不需要继续使用此连接时 记得关闭哦            socket close();        } catch (UnknownHostException e) {            e printStackTrace();        } catch (IOException e) {            e printStackTrace();        }    }

  }

lishixinzhi/Article/program/Java/gj/201311/27357

java 简单的socket通信

最简单的就是将dins.readUTF()方法换成dins.readLine(),出错的原因是到达流的末尾导致的意外终止。你会发现readLine()方法已经是废弃方法,不建议使用了。比较常规的方法是使用BufferedReader br= new BufferedReader(new InputStreamReader(ins)); 来替代DataInputStream祝你好运!

门外汉 求c++ 解释代码 简单socket 通信

#include "stdafx.h"#include《Winsock2.h》#include《stdio.h》#include《stdlib.h》#define PORT 5000int main(int argc, char* argv){int port=PORT;WSADATA wsaData;SOCKET sListen,sAccept; int iLen; int iSend; char buf="您好!"; //服务器、客户的地址struct sockaddr_in serv,cliet; //声明两个地址结构体变量if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){printf("Winsock load failed\n");//return;} //加载套接字库 //创建一个套接字 AD_INET(IPV4协议) SOCK_STREAM(TCP协议)sListen=socket(AF_INET,SOCK_STREAM,0); //判断是否失败if(sListen==INVALID_SOCKET){printf("socket failed:%d\n",WSAGetLastError());return;}为服务器的地址结构体赋值serv.sin_family=AF_INET; //必须和创建套接字时候一样(socket)serv.sin_port=htons(port); //端口 htons转换为网络字节序serv.sin_addr.s_addr=htonl(INADDR_ANY); //绑定的地址 htonl转换为网络字节序//INADDR_ANY 默认的网卡地址 本机 if(bind(sListen,(LPSOCKADDR)&serv,sizeof(serv))==SOCKET_ERROR){printf("bind()failed:%d\n",WSAGetLastError());return;}//bind 绑定地址 并且判断是否成功 if(listen(sListen,5)==SOCKET_ERROR) {printf("listen()failed:%d\n",WSAGetLastError());return;}//监听 并且判断是否成功 iLen=sizeof(cliet); 得到地址结构体的长度 accept函数需要//循环简体客户连接while(1) {sAccept=accept(sListen,(struct sockaddr*)&cliet,&iLen); //accept阻塞 知道有新的连接if(sAccept==INVALID_SOCKET){printf("accept()failed:%d\n",WSAGetLastError());break;}printf("accepted client IP:\n",inet_ntoa(cliet.sin_addr),ntohs(cliet.sin_port)); //给连接的客户发送信息iSend=send(sAccept,buf,sizeof(buf),0); if(iSend==SOCKET_ERROR){printf("send()failed:%d\n",WSAGetLastError());break;}else if(iSend==0)break;elseprintf("send()byte:%d\n",send);closesocket(sAccept);}closesocket(sListen);//关闭套接字WSACleanup();//关闭套接字库}=============================================client端代码#include "stdafx.h"#include《Winsock2.h》#include《stdio.h》#define PORT 5000#define BUFFER 1024void main(int argc,char *argv){WSADATA wsaData;SOCKET client;int port=PORT; int iLen; char buf; struct sockaddr_in serv; memset(buf,0,sizeof(buf)); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0){printf("Winsock load failed\n");return;} 为地址结构体赋值serv.sin_family=AF_INET; //地址族 和上面一样serv.sin_port=htons(port); //服务端监听的端口serv.sin_addr.s_addr=inet_addr("192.168.0.1"); //这应该是服务端的IP地址client=socket(AF_INET,SOCK_STREAM,0); //创建 套接字if(client==INVALID_SOCKET) //判定是否成功{printf("socket()failed:%d\n",WSAGetLastError());return;}//连接服务器 并且判断是否成功if(connect(client,(struct sockaddr*)&serv,sizeof(serv))==INVALID_SOCKET) {printf("connet()failed:%d\n",WSAGetLastError());return;}else{ iLen=recv(client,buf,sizeof(buf),0); //recv读取消息if(iLen==0) return;else if(iLen==SOCKET_ERROR){printf("recv()failed:%d\n",WSAGetLastError());return;}printf("recv()data from server:%s\n",buf);}closesocket(client); 关闭套接字WSACleanup();关闭套接字库printf("press any key to continue"); while(1);//防止程序退出}

简单的socket通信(怎样使用socket来实现简单的点对点通信)

本文编辑:admin

更多文章:


慧炬怎么样?炬的组词是什么

慧炬怎么样?炬的组词是什么

本文目录慧炬怎么样炬的组词是什么慧炬虚拟系统的慧炬虚拟系统的特征为什么慧炬虚拟操作系统中的桌面图标和任务栏都不见了慧炬怎么样慧炬——做最好用的U盘一.慧炬背景 U盘最早诞生在上个世纪末的1999年,主要是为了解决软盘驱动器的不安全、容量低,

2024年6月29日 11:33

雷炎之怒1 5无敌版(雷炎之怒2.0无敌版)

雷炎之怒1 5无敌版(雷炎之怒2.0无敌版)

本文目录雷炎之怒2.0无敌版雷炎之怒1.1无敌版的游戏操作雷炎之怒无敌版 最无敌的那种雷炎之怒1.1无敌版的装备获取与强化雷炎之怒修改雷炎之怒无敌版为什么不出来人物王者荣耀血魔之怒“地震级”改动,新出鬼盗之衣与冲击铠甲,程咬金无敌了!你怎么

2024年7月17日 21:06

手机怎么制作ppt(怎么用手机做PPT)

手机怎么制作ppt(怎么用手机做PPT)

大家好,如果您还对手机怎么制作ppt不太了解,没有关系,今天就由本站为大家分享手机怎么制作ppt的知识,包括怎么用手机做PPT的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录怎么用手机做PPT怎么在手机上做ppt手

2024年8月2日 18:21

大智慧交易软件官方免费下载(国泰君安大智慧软件官方下载 国泰君安大智慧5.99下载)

大智慧交易软件官方免费下载(国泰君安大智慧软件官方下载 国泰君安大智慧5.99下载)

大家好,今天小编来为大家解答以下的问题,关于大智慧交易软件官方免费下载,国泰君安大智慧软件官方下载 国泰君安大智慧5.99下载这个很多人还不知道,现在让我们一起来看看吧!本文目录国泰君安大智慧软件官方下载 国泰君安大智慧5.99下载东吴证券

2024年9月30日 04:50

传奇手游sf发布网新服(传奇手游三职业发布网新开服时间)

传奇手游sf发布网新服(传奇手游三职业发布网新开服时间)

大家好,今天小编来为大家解答以下的问题,关于传奇手游sf发布网新服,传奇手游三职业发布网新开服时间这个很多人还不知道,现在让我们一起来看看吧!本文目录传奇手游三职业发布网新开服时间有没有什么好的传奇私服网站手游传奇发布网有哪些开了个传奇私服

2024年6月15日 13:40

vb6 0中文企业版(vb6.0中文企业版安装 这该怎么办呐)

vb6 0中文企业版(vb6.0中文企业版安装 这该怎么办呐)

本文目录vb6.0中文企业版安装 这该怎么办呐vb6.0简体中文企业版怎么安装VB6.0中文企业版无法安装vb6.0中文企业版VB6.0中文企业版安装失败怎么办安装vb6.0中文企业版时双击setup.exe出现这个对话框啥意思啊,该怎么解

2024年7月7日 17:24

114查号官网(网上114电话查询)

114查号官网(网上114电话查询)

本篇文章给大家谈谈114查号官网,以及网上114电话查询对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录网上114电话查询固定电话号码归属地

2024年6月27日 08:02

歌曲剪切软件(音频剪辑软件哪个好用)

歌曲剪切软件(音频剪辑软件哪个好用)

大家好,如果您还对歌曲剪切软件不太了解,没有关系,今天就由本站为大家分享歌曲剪切软件的知识,包括音频剪辑软件哪个好用的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录音频剪辑软件哪个好用剪音乐用什么软件比较简单音乐编

2024年6月24日 23:50

怎样得到自己的生日QQ号?怎么才能申请到自己生日的QQ号码

怎样得到自己的生日QQ号?怎么才能申请到自己生日的QQ号码

本文目录怎样得到自己的生日QQ号怎么才能申请到自己生日的QQ号码什么样格式的QQ号叫生日号如何申请生日QQ号如何才能免费申请到生日QQ号有什么方法可以申请到生日QQ号你有多久没有用过QQ了你还记得QQ号是怎么注册的吗6位生日QQ号值多少钱怎

2024年3月12日 19:10

云帆小说阅读器下载(云帆小说阅读器基本使用指南)

云帆小说阅读器下载(云帆小说阅读器基本使用指南)

本文目录云帆小说阅读器基本使用指南我先后下载了3个小说下载阅读工具:云帆小说阅读器,不知什么原因,后来都不能使用了,谁知道怎么回事云帆小说下载阅读器的主菜单云帆小说阅读器基本使用指南  一、首先下载安装云帆小说阅读器。  安装导向:  双击

2024年7月23日 06:52

暗黑不朽手游官网(《暗黑破坏神:不朽》官网预约地址)

暗黑不朽手游官网(《暗黑破坏神:不朽》官网预约地址)

本篇文章给大家谈谈暗黑不朽手游官网,以及《暗黑破坏神:不朽》官网预约地址对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录《暗黑破坏神:不朽》官网预约地址taptap暗黑破坏神不朽是官服吗2020暗黑不朽手游上架时间暗黑破坏神不

2024年7月24日 22:30

120平米花6万装修效果(装修中120平装修6万块钱包括哪些项目)

120平米花6万装修效果(装修中120平装修6万块钱包括哪些项目)

大家好,今天小编来为大家解答以下的问题,关于120平米花6万装修效果,装修中120平装修6万块钱包括哪些项目这个很多人还不知道,现在让我们一起来看看吧!本文目录装修中120平装修6万块钱包括哪些项目120平米房子装修要多少钱120平米装修多

2024年7月2日 23:31

花生壳无法登陆(花生壳无法登陆)

花生壳无法登陆(花生壳无法登陆)

本文目录花生壳无法登陆花生壳无法登陆怎么办为什么域名解析正确的花生壳无法登陆花生壳无法登陆你首先判断下是哪出了问题,是域名的问题还是你设置的问题,ping命令 ping你的域名是否正常,如果不正常说明你的域名出了问题。如果正常的话可以tel

2024年6月23日 11:53

上海新冠疫苗(上海新冠疫苗接种如何预约)

上海新冠疫苗(上海新冠疫苗接种如何预约)

本篇文章给大家谈谈上海新冠疫苗,以及上海新冠疫苗接种如何预约对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录上海新冠疫苗接种如何预约上海启动吸入用新冠疫苗的接种!它的优势在哪,又有何缺点上海疫苗接种地点和时间最新上海疫苗接种地

2024年8月24日 03:15

pptv智能电视(pptv什么牌子)

pptv智能电视(pptv什么牌子)

其实pptv智能电视的问题并不复杂,但是又很多的朋友都不太了解pptv什么牌子,因此呢,今天小编就来为大家分享pptv智能电视的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录pptv什么牌子pptv智能电视开机没

2024年8月26日 02:25

魔兽争霸3对战地图下载(魔兽争霸标准对战地图在哪里下载)

魔兽争霸3对战地图下载(魔兽争霸标准对战地图在哪里下载)

大家好,如果您还对魔兽争霸3对战地图下载不太了解,没有关系,今天就由本站为大家分享魔兽争霸3对战地图下载的知识,包括魔兽争霸标准对战地图在哪里下载的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录魔兽争霸标准对战地图

2024年9月5日 19:20

ios十大耐玩单机游戏(10款iOS经典游戏推荐:精品单机游戏盘点,游戏荒别错过)

ios十大耐玩单机游戏(10款iOS经典游戏推荐:精品单机游戏盘点,游戏荒别错过)

今天给各位分享10款iOS经典游戏推荐:精品单机游戏盘点,游戏荒别错过的知识,其中也会对10款iOS经典游戏推荐:精品单机游戏盘点,游戏荒别错过进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录10款iOS经典游

2024年7月9日 20:50

方正静蕾简体(这是什么字体)

方正静蕾简体(这是什么字体)

本文目录这是什么字体方正静蕾简体怎么用方正静蕾简体的介绍电视剧《欢乐颂》中歌词用的什么字体-带图,先申请不是“方正静蕾简体”,我试过了,多谢这是什么字体1.大大小小,风格不一,带着体温的书写出来的字体。 手写体范例手写体近年来已经得到进一

2023年12月28日 19:00

下一个浏览器(ie11浏览器电脑版怎么下载)

下一个浏览器(ie11浏览器电脑版怎么下载)

大家好,今天小编来为大家解答以下的问题,关于下一个浏览器,ie11浏览器电脑版怎么下载这个很多人还不知道,现在让我们一起来看看吧!本文目录ie11浏览器电脑版怎么下载我下了一个IE9浏览器,直接下载了,却没有选择路径,我想知道默认安装在了那

2024年6月13日 14:22

primerpremier(ipad如何安装primerpremier)

primerpremier(ipad如何安装primerpremier)

本文目录ipad如何安装primerpremier为什么primer premier 6.0都按步骤操作了,cmd也显示done了,但还是未激活如何用primer premier 5.0设计引物设计引物要注意哪些细节primer premi

2024年5月4日 03:06

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2342
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1736
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1168
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1164
标签列表

热门搜索