java socket客户端和Python socket客户端的不同?高C币!!

我们接的项目有一个java写的server,我只有它的文档,并且用java已经实现,但是现在要为
python实现,用java实现的代码:

 public static void main(String[] args) throws WindException,   SendException, RecvException{
String host="172.22.128.16";
int port=6001;
TcpComm tcp = new TcpComm(true);
try {
    tcp.call(host,port);
    tcp.setTimeOut(30);
    String msg="POF001|S2B024|01|0033596105||";
    byte[] req = msg.getBytes();
    tcp.sendMsg(req);
    byte[] ans = tcp.recvBytesMsg();
    System.out.println(ans);
} catch (CallException e) {
    e.printStackTrace();
}

接口就是使用socket发送一个定制的代表内容长度的报文头和内容,sendMsg方法:

 public void sendMsg(byte[] b) throws SendException {
        try {
            OutputStream out = sock.getOutputStream();
            if (hasAtrHead) {
                byte[] sbt = short2Byte((short) b.length, true);
                out.write(head);
                out.write(sbt);
            }
            out.write(b);
            out.flush();
        }

其中hasAtrrHead使用的是true,定制报文头的方法:

 static public byte[] short2Byte(short value, boolean order) {
        byte[] bt = new byte[2];
        if (order) { // true 高8位 存放在tb[0]
            bt[0] = (byte) (value >> 8 & 0xff);
            bt[1] = (byte) (value & 0xff);
        } else {
            bt[1] = (byte) (value >> 8 & 0xff);
            bt[0] = (byte) (value & 0xff);
        }
        return bt;
    }

使用以上java代码运行没问题,但是当我用python写的时候,发送的socket没有被server接收到,应该是发送的格式不对,python代码:

 #-*- coding:GBK -*-
import socket
class Comm(object):
    def heads(self,length):
        bt=bytearray()
        bt.append(length >> 8 & 0xff)
        bt.append(length & 0xff)
        return bt
    def client(self):
        HOST='172.22.128.16'
        PORT=6001
        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        s.connect((HOST,PORT))       
        while 1:
            content='POF001|F2B107|01|3061009458||'
            length=len(content)
            head=self.heads(length)
            content=bytearray(content)
            s.send(head)
            s.send(content)
            data=s.recv(2048)    
        s.close()

if __name__=='__main__':
    a=Comm()
    a.client()

有人能告诉我到底是哪里不同吗?折腾两天了,求解答!!!

0

3个回答

问题已被自己解决,python中如直接转化数字为byte为4个字节,如需两个字节的网络序byte,需使用struct.pack('!h',x)

0

你python中content是字符串 而java发送的是byte字节数组 你需要转换一下再发送

0
abcdmn3721
abcdmn3721 已经转换了啊,用的bytearray
大约 3 年之前 回复

问题已被自己解决,python中如直接转化数字为byte为4个字节,如需两个字节的网络序byte,需使用struct.pack('!h',x)

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
socket编程之获取客户端和服务端ip
1. getsockname和getpeername函数 getsockname函数用于获取与某个套接字关联的本地协议地址  getpeername函数用于获取与某个套接字关联的外地协议地址 定义如下: #include<sys/socket.h> int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t ...
Java实现Socket服务器端和客户端通讯
创建服务器端serverSocket import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; ...
socket编程之---------获取客户端主机名和IP地址
TCP 服务器端:package com.wodwl.example;import java.io.IOException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;public class GetSocketInfo { public static void main
socket获取客户端ip例子
https://www.cnblogs.com/skynet/archive/2010/12/12/1903949.html 例子源码来源于上面帖子。稍做修改,将客户端地址获取,并转换成字符串打印,找了一圈。没有找到靠谱例子~~ #include #include #include #include #include #include #include #define M
Socket编程(二)随时接收客户端消息及多客户端连接
使服务器具有随时接收消息的能力 使用类似于心跳包的方法进行测试 SocketClient import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStr
在socket编程中,如何获取连接另一端(客户端)的ip地址,使用accept或者getpeername
//这段代码没有实际的功能,只是为了获取连接另一端的ip地址 #include #include #include #pragma comment(lib, "wsock32") using namespace std; void main() { int ret = 0; WSADATA wsadata; WORD version = MAKEWORD(2
Java获取客户端ip和端口
“青枫江上秋帆远,白帝城边古木疏” 如果你的方法参数里面直接有request,像下面这样: @RequestMapping("/test.json") @ResponseBody public Map<String,Object> getIpAndLoginname(HttpServletRequest request, HttpServletRespo...
java socket编程之实现客户端和服务器通讯一问一答
环境 1、一台电脑 2、开启两个myeclipse进行通信 通讯思路 1、客户端使用socket,绑定服务器的IP地址和端口号就可以连接服务器 2、客户端可以通过socket的输入流输出流方法对服务器进行读取和写入 3、服务器使用ServerSocket,开始监听,server.accept(); 这个方法是阻塞的,只有有客户端连接上,才会往下执行 4、server.acc...
JAVA SOCKET网络编程,服务端接收多个客户端连接的实现
这是基于前面一篇文章的一个简单扩展,当然这不是最好的实现 服务端如果要想接收多个客户端连接,必须
java socket客户端指定客户端端口与服务端交互
java socket客户端指定端口与服务端交互 1.一般情况生成socket实例的时候:socket = new Socket("localhost", 6666); 这种情况生成实例的时候,会选择一个没有使用的端口与服务端交互 2.在某些防火墙的限制下,可能随机的端口,在服务端发送消息的时候可能会限制,需要指定相应的端口,需要将实例化步骤修改如下即可 [code="java"] ...
socket C语言编写 客户端和服务器端程序
socket C语言编写 客户端和服务器端程序,用于服务器和客户端之间的通信
Java Socket(六) 使用多线程实现多客户端的通信
问题一个服务端可以跟多个客户端通讯基本步骤1.服务器端创建ServerSocket方法,循环调用accept()方法等待客户端连接2.客户端创建socket和服务的请求连接3.服务端接受客户端的请求,建立专线连接4.建立连接的两个socket在一个单独的线程上对话5.服务器端继续等待新的连接创建一个服务器相关的线程类:package com.test;/** * Created by SuPhoe
Socket 服务端使用多线程实现多客户端通讯实例
socket通信原理      Java多线程实现Socket通讯   1、服务端 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /** * * 基于socket通讯-服务端 * * * @author yangkj * @version * @since 2
利用Socket实现多客户端传输对象和传输文件实现
第一次洗博客,纯属自己纪念,主要来源是慕课网的Socket通信课程,实现课后任务多客户端传输对象,自己遇到的最大问题是忘记给User类实现序列化接口。客户端实现:package com.imooc.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import
linux 使用c在tcp socket服务器端获取客户端ip
  #include <sys/socket.h> #include <arpa/inet.h>   ......... struct sockaddr_in sa; int len; ......... len = sizeof(sa); if(!getpeername(sockconn, (struct sockaddr *)&sa, &len)...
socket编程:多路复用I/O服务端客户端之select
其实在之前的TCP之中,我们编程实现了多进程,多线程机制下的TCP服务器,但是对于这种的TCP服务器而言,存在太大的资源局限性。所以我们可以是用I/0模型中的多路复用I/O模型来进行编程。他的具体思想就是:当前进程可以处理多个相应时间,记录多个描述符,然后控制轮询时间态,当有响应产生的时候我们就去保存当前响应文件描述符,对他进行连接处理/数据传输就OK了。在一个进程进行多个响应时间的答复情况下,可
通过远程连接socket得到客户端的IP和连接端口
TCP:通过远程连接socket得到客户端的IP和连接端口SOCKETacceptSock;acceptSock = accept(listenSock, NULL, NULL); SOCKADDR_IN   sockAddr; int   iLen=sizeof(sockAddr); getpeername(acceptSock ,(struct   sockaddr   *)&sockAddr,&iLen);//得到远程IP地址和端口号  注意函数参数1:此处是接受连接                
用socke实现客户端和服务端的通信 (java)
首先我们要懂几个关键词 socket,InputStream,OutputStream,BufferReader 举个例子,假如两个人A,B要通信,他们使用一种信件交流的方法,并且规定好了信箱,一方把信件放在信箱里面,另一方就可以去看 socket简单来说就是连接两个程序的程序,就是信箱 在A程序中 InputStream 读入流,相当于是A写的信 OutputSream是A收到的信 ...
两个客户端通信的socket简单实现
实现两个客户端通过服务器来进行通信的小程序
JAVA网络编程 ——基于TCP的Socket编程(1)——实现服务器端与客户端的实时对话
第一篇文章,我先介绍以及记录一下我所学的知识点。(总结了一下视频老师讲的东西)一,HTTP与Socket1.HTTP:超文本传输协议特点:客户端发送的请求需要服务器端每次来响应,在请求结束之后主动释放连接,从建立连接到关闭连接称为“一次连接”,所以HTTP是“短连接”。2.Socket(IP+PORT):是TCP/IP的封装与应用,它不是协议,而是API特点:客户端与服务器之间一旦建立连接,就可以...
Socket技术二(一个服务器,多个客户端)
        主要用到线程和线程池。没个客户端访问都要启动一个线程,然后将其存放在线程池中。这样就实现了多个用户的同时访问!         启动一个服务器,三个客户端,将其发送是信息分别为“send1”“send2”“send3”。运行结果为: server控制台:send1                                   send2                ...
使用多线程实现多客户端的连接(通过Socket实现TCP编程)
服务器线程类 package com.susu; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWri
python socket两个客户端相互聊天 聊天室功能
python+socket,两个客户端,一个服务器,服务器实现转发功能,两个客户端聊天。发送规则“ @(+昵称+)@(+内容)” 。
服务端的通信socket号与客户端的通信socket号一致吗?---不一致
本文不阐述什么大问题, 仅仅做一个简单的验证:服务端的通信socket号与客户端的通信socket号不一致         下面, 我们看服务端程序: #include #include // winsock接口 #pragma comment(lib, "ws2_32.lib") // winsock实现 int main() { WORD wVersionRequested; /
socket的accept函数解析以及服务器和多个客户端的端口问题
今天与同学争执一个话题:由于socket的accept函数在有客户端连接的时候产生了新的socket用于服务该客户端,那么,这个新的socket到底有没有占用一个新的端口?     讨论完后,才发现,自己虽然熟悉socket的编程套路,但是却并不是那么清楚socket的原理,今天就趁这个机会,把有关socket编程的几个疑问给搞清楚吧。    先给出一个典型的TCP/IP通信示意图。
socket编程三,实现多个客户端同时请求的一个服务端
在我的文章的socket编程二中虽然实现面向对象的编程的思想,但是还有一个致命的缺点,无法实现多用户同时请求,一旦出现多用户的时候,便会报错,所以下面再继续对socket二进行修改 [b]第一步:再次新建一个 java project,再增加一个类,多线程类,重写父类的run方法,实现处理用户的请求,如下图所示[/b]: [img]http://dl2.iteye.com/upload...
socket服务器发送大数据,客户端循环接收
服务器端代码: public void SendTextMsg(string str) { int maxlength = 1000; int page = 0; if (str.Length % maxlength == 0) { page =
用ServerSocket类与Socket类实现客户端与服务端的交互
ServerSocket类,此类实现服务端的套接字,Socket类,此类实现客户端的套接字,而套接字就是两台机器间通信的端点,所以就用ServerSocket类和Socket类实现客户端与服务端的交互,下面先来查看ServerSocket类的api 看到构造方法,首先想到要使用要先new一个,然后方法里可以绑定dao特定端口,这里以端口8888为例,创建一个服务端监听8888端口,然后获取连接着
socket bind在客户端和服务器端使用的区别
1、client bind (1)bind端口 由进程选择一个端口去连服务器,(如果默认情况下,调用bind函数时,内核指定的端口是同一个,那么调用多个调用了bind()的client程序,会出现端口被占用的错误)注意这里的端口是客户端的端口。如果不分配就表示交给内核去选择一个可用端口。 (2)bind IP地址 相当于为发送出去的IP数据报分配了源IP地址,但交给进程分配IP地址的时候(
关于服务器端和客户端的区别
首先 百度百科解释: 服务端:服务端是为客户端服务的,服务的内容诸如向客户端提供资源,保存客户端数据。是实现游戏特色化的重要途径,也是最直接可以通过游戏表现出来的技术,比如你要修改某个NPC的参数,重加载后,在游戏内立刻体现出来。 客户端:客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序。除了一些只在本地运行的应用程序之外,一般安装在普通的客户机上,需要与服务...
服务器端如何管理很多个客户端的socket连接?
问:我想请问大家一个问题,当一个服务器端面临成千上万个客户端的连接,在完成端口后,服务器程序如何管理这成千上万个客户端的连接,保证正常的通讯? 不会是有一万个客户端,就建立一万个线程来保证服务器处理客户端的数据吧! 答: 1)用完成端口 2)线程有限,因此使用线程池,逐个处
socket实现服务器和客户端数据的传输
以socket构建服务器和客户端架构,实现c++和unity两客户端通过服务器传输数据
Java Socket 客户端与服务器端的简单交互
一直想了解客户端与服务器之间的底层的一些交互 我刚开始看到关于解析header的一些例子,但是不清楚是客户端呢还是服务器端 后来,我发现,我的想法是有问题的,解析header只是例子的一个体现方式。 客户端 request 服务器 response  不管哪个都有头部信息,所以重点不是在这里。 服务器端是监听某个端口是否有客户端对其进行连接,socket就像是一个管道,client
用socket实现客户端与服务器端的通信,要求在客户发送数据后能够回显相同的数据。
问题描述: 用socket实现客户端与服务器端的通信,要求在客户发送数据后能够回显相同的数据。分析: 服务器端可以使用ServerSocket 客户端可以使用Socket代码实现如下: 服务器端代码: import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import
Java网络编程之客户端中的Socket
Socket Socket是两个主机之间的连接,它有下面7种基本操作: 连接到远程主机 发送数据 接受数据 关闭连接 绑定端口 监听输入数据 在绑定的端口上接受远程机器的连接 前面4中操作是客户端和服务端共有的,后面3种只有服务端才需要(定义在ServerSocket类中)。 从Server读取数据 @Test public void readFromTimeServ...
Socket(套接字)在服务器端和客户端之间的基本工作原理
Socket之间的连接过程主要可以概括为以下三步: 服务器建立监听:客户端初始化Socket动态库后创建套接字,然后指定客户端Socket的地址,循环绑定Socket直至成功,然后开始建立监听,此时客户端处于等待状态,实时监控网络状态; 客户端提出请求:客户端的Socket向服务器端提出连接请求,此时客户端描述出它所要连接的Socket,指出要连接的Socket的相关属性,然后向服务器端S...
socket服务端,记录接受客户端发送的请求信息
记录接受客户端发送的请求信息
Socket编程实现服务端和客户端的交互
用Socket实现网络编程首先要创建一个Socket对象,Socket类位于System.Net.Socket命名空间,需要先行导入。创建Socket对象需要以下三个参数,这些参数都是枚举类型: ①AddressFamily成员指定Socket用来解析地址的寻址方案,例如:InternetWork指示当Socket使用一个IP版本4地址连接; ②SocketType定义一个要打开的Socket
socket多线程、一个服务器多客户端的实现
鉴于ServerSocket的accept方法是阻塞的,那么只能通过多线程的方式实现多客户端连接与服务器连接 基本步骤: 1,服务端创建ServerSocket绑定端口号,循环调用accept()方法 2,客户端创建一个socket并请求和服务器端连接 3,服务器端接受客户端请求,创建socket与该客户建立连接 4,两个socket在一个单独的线程上通话 5,服务器端继续等待新的连接...
Java Socket服务器端与客户端的编程步骤总结
一,InetAddress类: InetAddress类没有构造方法,所以不能直接new出一个对象; 可以通过InetAddress类的静态方法获得InetAddress的对象; InetAddress.getLocalHost(); InetAddress.getByName(""); 类主要方法: String - address.getHostName(); String -
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java学习socket 高端的教育nlp