导航:首页 > 编程语言 > 通信客户端编程

通信客户端编程

发布时间:2023-03-08 20:29:51

java网络编程应该怎样在客户端和服务器间实现通信

以前写的,照贴了。。。服务器端:import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.*;
import java.net.*;/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。
* 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。
* (20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)*/
public class N4BT6 extends Frame
{
DatagramSocket socket ;
DatagramPacket packet ;byte[] buf ;
File file ;
FileInputStream input;
String message = "该文件不存在";
TextArea text;
public N4BT6(String title)
{
super(title);
text = new TextArea(6,4);
add(text);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});

buf = new byte[1024];
try
{
socket = new DatagramSocket(1230);
packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
file = new File(new String(packet.getData()));
socket = new DatagramSocket();
}
catch (Exception e)
{e.printStackTrace();
}

if(file.exists())
{
try
{
buf = new byte[(int)file.length()];
packet = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234);
input = new FileInputStream(file);
input.read(buf);
socket.send(packet);
}
catch (IOException e)
{
e.printStackTrace();
}
}
else
{
try
{
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1234);
socket.send(packet);
}
catch (Exception e)
{
e.printStackTrace();
}
}

}
public static void main(String[] args)
{
new N4BT6("Server");
}
}
客户端:import java.awt.*;
import java.awt.event.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;public class N4BT6_2 extends Frame
{
TextArea text;
String message = "Q.txt";
DatagramSocket socket ;
DatagramPacket packet;
byte[] buf;
public N4BT6_2(String title)
{
super(title);
text = new TextArea(6,4);
add(text);
setSize(400, 300);
setVisible(true);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
dispose();
}
});
try
{

socket = new DatagramSocket();
packet = new DatagramPacket(message.getBytes(),message.getBytes().length,
InetAddress.getLocalHost(),1230);
socket.send(packet);
}
catch (Exception e)
{
e.printStackTrace();
}

try
{
buf = new byte[1024];
socket = new DatagramSocket(1234);
packet = new DatagramPacket(buf,buf.length);
socket.receive(packet);
text.append(new String(buf));
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
new N4BT6_2("Client");
}
}

㈡ 客户端与服务器端的通讯,C++书写步骤。

C++通过socket编程实现服务端与客户端的通讯,代码如下(个人环境下测试正常,如果遇到运行send发送报错,请检查服务器端口是否被占用,调试的时候请先运行服务端程序在运行客服端,一定要加载库函数ws2_32.lib,发送字符时应该多加一个空字符作为结束字符):

服务器端程序:

//Server.cpp:.
#include"winsock2.h"
#pragmacomment(lib,"ws2_32.lib")
#include<iostream>
usingnamespacestd;
intmain(intargc,char*argv[])
{
constintBUF_SIZE=64;
WSADATAwsd;//WSADATA变量
SOCKETsServer;//服务器套接字
SOCKETsClient;//客户端套接字
SOCKADDR_INaddrServ;;//服务器地址
charbuf[BUF_SIZE];//接收数据缓冲区
charsendBuf[BUF_SIZE];//返回给客户端得数据
intretVal;//返回值
//初始化套结字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartupfailed!"<<endl;
return1;
}

//创建套接字
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
cout<<"socketfailed!"<<endl;
WSACleanup();//释放套接字资源;
return-1;
}

//服务器套接字地址
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons(4999);
addrServ.sin_addr.s_addr=INADDR_ANY;
//绑定套接字
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
cout<<"bindfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}

//开始监听
retVal=listen(sServer,1);
if(SOCKET_ERROR==retVal)
{
cout<<"listenfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}

//接受客户端请求
sockaddr_inaddrClient;
intaddrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);
if(INVALID_SOCKET==sClient)
{
cout<<"acceptfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}

while(true)
{
//接收客户端数据
ZeroMemory(buf,BUF_SIZE);
retVal=recv(sClient,buf,BUF_SIZE,0);
if(SOCKET_ERROR==retVal)
{
cout<<"recvfailed!"<<endl;
closesocket(sServer);//关闭套接字
closesocket(sClient);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}
if(buf[0]=='0')
break;
cout<<"客户端发送的数据:"<<buf<<endl;

cout<<"向客户端发送数据:";
cin>>sendBuf;

send(sClient,sendBuf,strlen(sendBuf),0);
}

//退出
closesocket(sServer);//关闭套接字
closesocket(sClient);//关闭套接字
WSACleanup();//释放套接字资源;

return0;
}

客户端程序:

#include"winsock2.h"
#include<iostream>
#pragmacomment(lib,"ws2_32.lib")

usingnamespacestd;
BOOLRecvLine(SOCKETs,char*buf);//读取一行数据

intmain(intargc,char*argv[])
{
constintBUF_SIZE=64;

WSADATAwsd;//WSADATA变量
SOCKETsHost;//服务器套接字
SOCKADDR_INservAddr;//服务器地址
charbuf[BUF_SIZE];//接收数据缓冲区
charbufRecv[BUF_SIZE];
intretVal;//返回值
//初始化套结字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartupfailed!"<<endl;
return-1;
}
//创建套接字
sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sHost)
{
cout<<"socketfailed!"<<endl;
WSACleanup();//释放套接字资源
return-1;
}

//设置服务器地址和端口
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servAddr.sin_port=htons((short)4999);
intnServAddlen=sizeof(servAddr);

//连接服务器
retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
if(SOCKET_ERROR==retVal)
{
cout<<"connectfailed!"<<endl;
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return-1;
}
while(true)
{
//向服务器发送数据
ZeroMemory(buf,BUF_SIZE);
cout<<"向服务器发送数据:";
cin>>buf;
retVal=send(sHost,buf,strlen(buf),0);
if(SOCKET_ERROR==retVal)
{
cout<<"sendfailed!"<<endl;
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return-1;
}
//RecvLine(sHost,bufRecv);
ZeroMemory(bufRecv,BUF_SIZE);
recv(sHost,bufRecv,BUF_SIZE,0);//接收服务器端的数据,只接收5个字符
cout<<endl<<"从服务器接收数据:"<<bufRecv;
cout<<" ";
}
//退出
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return0;
}

㈢ 即时通讯软件开发的网络编程方式有哪些

引言、即时通讯是网上最为流行的通讯方式,市场上也出现了各种各样的即时通讯软件。这篇文章将会给大家介绍一些开发即时通讯软件的网络编程方式。

开发即时通讯软件需要用到安卓端技术java语言,苹果端oc语言,电脑端win系统桌面C/C++语言,管理后台数据库语言,后台管理界面java或者php。建议可以使用第三方SDK,可以有效地避免消息漏发,卡顿,数据并发等很多问题,提高了用户对产品的体验感。

三、如何设置编程。

mysql数据库的用户名为root,密码为空,可以根据自己的需要设置相应的用户名和密码(固定在程序中)。mychatserver是聊天服务器,myfileserver是文件服务器,文件服务器负责上传和下载聊天中发送的文件,myimgserver负责上传和下载聊天中的图片。三个服务之间相互独立,不会互相影响。聊天服务器监听端口是20000,文件服务器端口是20001,图片服务器端口号是20002,这三个端口的客户端连接,其中聊天端口和客户端是长连接,文件端口和图片可选择长连接或短连接。第一次运行mychatserver时,如果能顺利连上mysql,mychatserver会自动检测是否存在名为myim的数据库,如果不存在就可以创建了,并新建三张信息表,分别是用户信息表,好友关系表和聊天消息记录表。第一次启动文件服务器时会创建filecache目录,这个目录用来存储聊天中的聊天图片和离线文件以及客户端的升级包。为了方便查看代码,可以用Visual Studio管理代码,使用VS打开myserver.sln查看和管理代码。

㈣ C语言socket编程怎么实现2个客户端之间通信

两个单独的客户端是没法通信的,必须经过服务器。
服务器和客户端连接过程如下:
客户端:
socket-->connect-->read/write
服务器:
socket-->bind-->listen-->accept-->write/read
若要通讯必须要有服务器,只有在connect和accept建立好连接之后才能真正的通信。
如果你是问编程的流程或者上述函数的意义和用法网络上一大堆。

㈤ java网络编程应该怎样在客户端和服务器间实现通信

以前写的,照贴了。。。服务器端:import java.awt.*;x0dx0aimport java.awt.event.WindowAdapter;x0dx0aimport java.awt.event.WindowEvent;x0dx0aimport java.io.*;x0dx0aimport java.net.*;/*6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。x0dx0a* 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。x0dx0a* (20分)(服务端程序和客户端程序分别命名为Server.java和Client.java)*/x0dx0apublic class N4BT6 extends Framex0dx0a{x0dx0aDatagramSocket socket ;x0dx0aDatagramPacket packet ;byte[] buf ;x0dx0aFile file ;x0dx0aFileInputStream input;x0dx0aString message = "该文件不存在";x0dx0aTextArea text;x0dx0apublic N4BT6(String title)x0dx0a{x0dx0asuper(title);x0dx0atext = new TextArea(6,4);x0dx0aadd(text);x0dx0asetSize(400, 300);x0dx0asetVisible(true);x0dx0aaddWindowListener(new WindowAdapter()x0dx0a{x0dx0apublic void windowClosing(WindowEvent e)x0dx0a{x0dx0adispose();x0dx0a}x0dx0a});x0dx0ax0dx0abuf = new byte[1024];x0dx0atryx0dx0a{x0dx0asocket = new DatagramSocket(1230);x0dx0apacket = new DatagramPacket(buf, buf.length);x0dx0asocket.receive(packet);x0dx0afile = new File(new String(packet.getData()));x0dx0asocket = new DatagramSocket();x0dx0a} x0dx0acatch (Exception e)x0dx0a{e.printStackTrace();x0dx0a}x0dx0ax0dx0aif(file.exists())x0dx0a{x0dx0atryx0dx0a{x0dx0abuf = new byte[(int)file.length()];x0dx0apacket = new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),1234);x0dx0ainput = new FileInputStream(file);x0dx0ainput.read(buf);x0dx0asocket.send(packet);x0dx0a}x0dx0acatch (IOException e) x0dx0a{x0dx0ae.printStackTrace();x0dx0a}x0dx0a}x0dx0aelsex0dx0a{x0dx0atryx0dx0a{x0dx0apacket = new DatagramPacket(message.getBytes(),message.getBytes().length,x0dx0aInetAddress.getLocalHost(),1234);x0dx0asocket.send(packet);x0dx0a}x0dx0acatch (Exception e) x0dx0a{x0dx0ae.printStackTrace();x0dx0a}x0dx0a}x0dx0ax0dx0a}x0dx0apublic static void main(String[] args)x0dx0a{x0dx0anew N4BT6("Server");x0dx0a}x0dx0a}x0dx0a客户端:import java.awt.*;x0dx0aimport java.awt.event.*;x0dx0aimport java.net.DatagramPacket;x0dx0aimport java.net.DatagramSocket;x0dx0aimport java.net.InetAddress;public class N4BT6_2 extends Framex0dx0a{x0dx0aTextArea text;x0dx0aString message = "Q.txt";x0dx0aDatagramSocket socket ;x0dx0aDatagramPacket packet;x0dx0abyte[] buf;x0dx0apublic N4BT6_2(String title)x0dx0a{x0dx0asuper(title);x0dx0atext = new TextArea(6,4);x0dx0aadd(text);x0dx0asetSize(400, 300);x0dx0asetVisible(true);x0dx0aaddWindowListener(new WindowAdapter()x0dx0a{x0dx0apublic void windowClosing(WindowEvent e)x0dx0a{x0dx0adispose();x0dx0a}x0dx0a});x0dx0atryx0dx0a{x0dx0ax0dx0asocket = new DatagramSocket();x0dx0apacket = new DatagramPacket(message.getBytes(),message.getBytes().length,x0dx0aInetAddress.getLocalHost(),1230);x0dx0asocket.send(packet);x0dx0a}x0dx0acatch (Exception e) x0dx0a{x0dx0ae.printStackTrace();x0dx0a}x0dx0ax0dx0atryx0dx0a{x0dx0abuf = new byte[1024];x0dx0asocket = new DatagramSocket(1234);x0dx0apacket = new DatagramPacket(buf,buf.length);x0dx0asocket.receive(packet);x0dx0atext.append(new String(buf));x0dx0a}x0dx0acatch (Exception e) x0dx0a{x0dx0ae.printStackTrace();x0dx0a}x0dx0a}x0dx0apublic static void main(String[] args)x0dx0a{x0dx0anew N4BT6_2("Client");x0dx0a}x0dx0a}

㈥ 编写java程序实现客户端和服务端的通信

没错啊,编译和运行都很正常。
你到底要实现什么功能?

客户端把“请求连接”转换成byte发给服务器,服务器显示打印
服务器把“连接成功”转换成byte发给客户端,客户端显示打印,

语法一点也没错啊。

string.getbyte()返回的是一个byte类型的数组,你直接打印打印的是数组的地址

㈦ Linux下Socket编程 怎样实现客户端之间互相通信

  1. 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。

  2. 下面用Socket实现一个windows下的c语言socket通信例子,这里我们客户端传递一个字符串,服务器端进行接收。

【服务器端】
#include"stdafx.h"
#include<stdio.h>
#include<winsock2.h>
#include<winsock2.h>
#defineSERVER_PORT5208//侦听端口
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
intret,nLeft,length;
SOCKETsListen,sServer;//侦听套接字,连接套接字
structsockaddr_insaServer,saClient;//地址信息
char*ptr;//用于遍历信息的指针
//WinSock初始化
wVersionRequested=MAKEWORD(2,2);//希望使用的WinSockDLL的版本
ret=WSAStartup(wVersionRequested,&wsaData);
if(ret!=0)
{
printf("WSAStartup()failed! ");
return;
}
//创建Socket,使用TCP协议
sListen=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sListen==INVALID_SOCKET)
{
WSACleanup();
printf("socket()faild! ");
return;
}
//构建本地地址信息
saServer.sin_family=AF_INET;//地址家族
saServer.sin_port=htons(SERVER_PORT);//注意转化为网络字节序
saServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//使用INADDR_ANY指示任意地址

//绑定
ret=bind(sListen,(structsockaddr*)&saServer,sizeof(saServer));
if(ret==SOCKET_ERROR)
{
printf("bind()faild!code:%d ",WSAGetLastError());
closesocket(sListen);//关闭套接字
WSACleanup();
return;
}

//侦听连接请求
ret=listen(sListen,5);
if(ret==SOCKET_ERROR)
{
printf("listen()faild!code:%d ",WSAGetLastError());
closesocket(sListen);//关闭套接字
return;
}

printf("Waitingforclientconnecting! ");
printf("Tips:Ctrl+ctoquit! ");
//阻塞等待接受客户端连接
while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。
{
length=sizeof(saClient);
sServer=accept(sListen,(structsockaddr*)&saClient,&length);
if(sServer==INVALID_SOCKET)
{
printf("accept()faild!code:%d ",WSAGetLastError());
closesocket(sListen);//关闭套接字
WSACleanup();
return;
}
charreceiveMessage[5000];
nLeft=sizeof(receiveMessage);
ptr=(char*)&receiveMessage;
while(nLeft>0)
{
//接收数据
ret=recv(sServer,ptr,5000,0);
if(ret==SOCKET_ERROR)
{
printf("recv()failed! ");
return;
}
if(ret==0)//客户端已经关闭连接
{
printf("Clienthasclosedtheconnection ");
break;
}
nLeft-=ret;
ptr+=ret;
}
printf("receivemessage:%s ",receiveMessage);//打印我们接收到的消息。

}
//closesocket(sListen);
//closesocket(sServer);
//WSACleanup();
}
【客户端】
#include"stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<winsock2.h>
#defineSERVER_PORT5208//侦听端口
voidmain()
{
WORDwVersionRequested;
WSADATAwsaData;
intret;
SOCKETsClient;//连接套接字
structsockaddr_insaServer;//地址信息
char*ptr;
BOOLfSuccess=TRUE;
//WinSock初始化
wVersionRequested=MAKEWORD(2,2);//希望使用的WinSockDLL的版本
ret=WSAStartup(wVersionRequested,&wsaData);
if(ret!=0)
{
printf("WSAStartup()failed! ");
return;
}
//确认WinSockDLL支持版本2.2
if(LOBYTE(wsaData.wVersion)!=2||HIBYTE(wsaData.wVersion)!=2)
{
WSACleanup();
printf("InvalidWinSockversion! ");
return;
}
//创建Socket,使用TCP协议
sClient=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(sClient==INVALID_SOCKET)
{
WSACleanup();
printf("socket()failed! ");
return;
}
//构建服务器地址信息
saServer.sin_family=AF_INET;//地址家族
saServer.sin_port=htons(SERVER_PORT);//注意转化为网络节序
saServer.sin_addr.S_un.S_addr=inet_addr("192.168.1.127");
//连接服务器
ret=connect(sClient,(structsockaddr*)&saServer,sizeof(saServer));
if(ret==SOCKET_ERROR)
{
printf("connect()failed! ");
closesocket(sClient);//关闭套接字
WSACleanup();
return;
}


charsendMessage[]="hellothisisclientmessage!";
ret=send(sClient,(char*)&sendMessage,sizeof(sendMessage),0);
if(ret==SOCKET_ERROR)
{
printf("send()failed! ");
}
else
printf("clientinfohasbeensent!");
closesocket(sClient);//关闭套接字
WSACleanup();
}

㈧ java 网络编程: 如何实现客户端与客户端之间的之间通信

服务器告知双方对方的ip地址,并协调由哪一方主动连接。
如 协调结果是: 把c2的地址告诉c1,让c1主动连接c2,让c2打开端口等待连接。

要考虑认证问题,比如c2如何知道连接上来的是c1,而不是其他人,就需要有认证机制。
另外要考虑内网问题。由于从外部连接内网里面的IP地址是相当繁琐复杂的,所以需要特别的机制处理。

阅读全文

与通信客户端编程相关的资料

热点内容
金得利文件夹是哪产的 浏览:922
电脑棕色文件夹打不开 浏览:655
微信如何使用网络代理服务器 浏览:323
无线网桥加密技术 浏览:282
pdf格式转化ppt 浏览:934
程序设计流程图表达算法 浏览:539
plc程序员待遇怎么样 浏览:596
一加主题文件夹商店 浏览:494
人渣怎么看ip服务器地址 浏览:550
为什么周年庆服务器喇叭掉价了 浏览:215
pdf橡皮擦注册码 浏览:362
樱校设置id时出现服务器错误该怎么办 浏览:730
涉及到年份求星期几的算法 浏览:557
linux防止攻击 浏览:990
已加密的pdf如何删减页 浏览:794
基于c51单片机 浏览:766
编译的编怎么写 浏览:615
单片机的冰箱温度控制的设计 浏览:940
苏东坡全集pdf 浏览:799
提升vue编译速度 浏览:491