海外主机测评

您现在的位置是:首页 > 服务器 > 正文

服务器

关于socket编程实例的信息

cds8202023-04-17服务器100
本文目录一览:1、pythonsocket编程2、关于vb.net中socket编程实例:服务器端的一些问题3、用Socket编程实现一个基于C/S的应用4、用Javas

本文目录一览:

  • 1、python socket编程
  • 2、关于vb.net中socket编程实例:服务器端的一些问题
  • 3、用Socket编程实现一个基于C/S的应用
  • 4、用Java socket 实现客户端与服务器之间的数据的发送与接受。。。双向的

python socket编程

通过python的网络通信支持,通过网络模块,python程序可以非常方便地相互访问互联网上的HTTP服务和FTP服务等。可以直接获取互联网上的远程资源,还可以向远程资源发送GET POST请求。

计算机网络是线代通信技术与计算机技术相结合的产物,计算机网络主要可以提供

通信协议一般由三部分组成:一是语义部分,用于决定双方对话类型;二是语法部分,用于决定双方对话的格式;三是变化规则,用于决定通信双方的应答关系。

应用层:与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。有HTTP, FTP , NFS, SMTP, TELNET

表示层:这一层主要是定义数据格式及加密。如加密, ASCII

会话层:它定义了如何开始、控制和结束一个会话,包括对多个双向消息的控制和管理,以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的。如 RPC,SQL

传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在泳衣主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能,如 TCP UDP SPX

网络层:这层对端对端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。如IP

数据链路层:它定义了在单个链路上如何传输数据。这些协议与被讨论的各种介质有关

物理层:OSI的物理层规范是有关传输介质的特性,这些规范通常也参考了其他组织制定的标准。

IP地址用于唯一标识网络中的一个通信实体,这个通信实体既可以是一个主机,也可以是路由器的某个端口,。而在基于IP协议的网络中传输数据包都必须使用IP地址来进行标识。

端口,程序与外界进行交互的出入口。

Tcp/IP通信协议是一种可靠的网络协议,他在通信的两端建立一个socket,从而形成虚拟的网络链路。一旦建立了虚拟网络链路,两端的程序就可以通过该链路进行通信。

IP 是Internet上使用的一个关键协议,通过IP协议,使internet成为一个允许连接不同类型的计算机和不同操作系统的网络。同时还需要TCP协议来提供可靠且无差错的服务。

TCP协议被称为端对端协议,这是因为他在两台计算机的连接中起了非常重要的角色,当一台计算机需要与另外一台计算机连接时,TCP协议会让他们之间建立一个虚拟链路,用于发送和接受数据。

TCP协议负责收集这些数据包,并将其按照适当的顺序传送,接收端收到数据包后将其正确的还原。TCP保证数据包在传送过程中准确无误。TCP协议采用重发机制,当一个通信实体发送一个消息给另外一个通信实体后,需要接收到另外一个通信实体的确认信息,如果没有接收到该确认信息,则会重发信息。

使用socket之前,必须先创建socket对象,可通过该类的构造器来创建socket实例。

socket.socket(family = AF_INET, type= SOCK_STREAM, proto=0, fileno= None)

socket对象常用的方法:

基本步骤

创建客户端的步骤:

小实例:服务端

客户端:

通过这样就可以实现socket之间的通信。

关于vb.net中socket编程实例:服务器端的一些问题

Socket类连接后 可以通过类中的 RemoteEndPoint 来获取远程IP和端口信息.

要注意的是.需要将它强制转化为 IPEndPoint类型 然后通过 IPEndPoint.Address以及IPEndPoint.Port来获取对应的IP及端口

例:

Dim REV_SCK As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)

'这里创建一个UDP Socket连接的实例 TCP也是一样的

'省略SOCKET连接的代码 当SOCKET连接成功后 可以用下面的语句获取远程信息

Dim IP as string ,Port as integer

'定义IP和Port变量 用来保存地址及端口

IP = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Address.ToString())

Port = IPAddress.Parse(CType(REV_SCK.RemoteEndPoint, IPEndPoint).Port)

用Socket编程实现一个基于C/S的应用

例子一:

1 客户端的程序

package net3;

import java.io.*;

import java.net.*;

public class Client {

public static void main(String[] args){

try{

System.out.println("连接到服务器");

Socket s=new Socket("localhost",4005);

BufferedReader b=new BufferedReader(new InputStreamReader(System.in));

BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));

PrintWriter pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

String str="";

String sss="";

while(true)

{

str=b.readLine();

pw.println(str);

pw.flush();

//不理睬大小写转换

if(str.equalsIgnoreCase("stop"))

{

System.out.println("服务停止");

break;

}

sss=br.readLine();

System.out.println(sss);

if(sss.equalsIgnoreCase("stop"))

{

System.out.println("服务停止");

break;

}

}

b.close();

br.close();

pw.close();

}

catch(IOExceptiON e){}

}

}

2 服务器端的程序:

package net3;

import java.io.*;

import java.net.*;

public class Server {

public static void main(String[] args){

try{

System.out.println("服务器正在启动....");

ServerSocket ss=new ServerSocket(4005);

System.out.println("服务器启动,等待服务...");

Socket s=ss.accept();

BufferedReader r=new BufferedReader(new InputStreamReader(System.in));

BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));

PrintWriter bw=new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

String str="";

String sss="";

while(true)

{

sss=br.readLine();

System.out.println(sss);

if(sss.equalsIgnoreCase("stop"))

{

System.out.println("服务停止");

break;

}

str=r.readLine();

bw.println(str);

bw.flush();

//不理睬大小写转换

if(str.equalsIgnoreCase("stop"))

{

System.out.println("服务停止");

break;

}

}

br.close();

r.close();

bw.close();

}

catch(IOException e){}

}

}

例子二:

package test.socket;

import java.io.BufferedReader;

import java.io.DataInputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintStream;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.UnknownHostException;

public class TalkMe {

public static void main(String[] args) {

System.out.println("请输入:IP地址:");

TalkMe talk = new TalkMe();

talk.listener().start();

try {

talk.talker(new BufferedReader(new InputStreamReader(System.in)).readLine()).start();

} catch (IOException e) {

e.printStackTrace();

}

}

private Thread listener(){

return new Thread() {

public void run() {

DataInputStream dataIS = null;

String clientSay;

try {

ServerSocket server = new ServerSocket(9666);

Socket socket = server.accept();

while (true) {

dataIS = new DataInputStream(socket.getInputStream());

clientSay = dataIS.readLine();

System.out.println("Other say:" + clientSay);

}

} catch (IOException e) {

e.printStackTrace();

}

}

};

}

private Thread talker(final String ip){

return new Thread(){

public void run() {

Socket socket = null;

InputStreamReader stdin=new InputStreamReader(System.in);

BufferedReader br=new BufferedReader(stdin);

DataInputStream dataIS = new DataInputStream(System.in);

OutputStream os;

PrintStream ps;

String say = "";

boolean flag = true;

while (flag) {

if (flag)

System.out.println("connection ....");

try {

socket = new Socket(ip, 9666);

System.out.println("connection ok.");

flag = true;

os = socket.getOutputStream();

ps = new PrintStream(os);

while (true) {

say = dataIS.readLine();

ps.println(say);

}

} catch (UnknownHostException e) {

try {

sleep(1000);

} catch (InterruptedException e1) {

e1.printStackTrace();

}

} catch (IOException e) {

}

}

}

};

}

}

用Java socket 实现客户端与服务器之间的数据的发送与接受。。。双向的

下面是一个简单的通讯实例,进行Server和Client之间的文件传输。。如果是简单的文本传输的话简化掉文本操作的内容即可。。

1.服务器端

package sterning;

import java.io.BufferedInputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.net.ServerSocket;

import java.net.Socket;

public class ServerTest {

int port = 8821;

void start() {

Socket s = null;

try {

ServerSocket ss = new ServerSocket(port);

while (true) {

// 选择进行传输的文件

String filePath = "D:\\lib.rar";

File fi = new File(filePath);

System.out.println("文件长度:" + (int) fi.length());

// public Socket accept() throws

// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。

s = ss.accept();

System.out.println("建立socket链接");

DataInputStream dis = new DataInputStream(new BufferedInputStream(s.getInputStream()));

dis.readByte();

DataInputStream fis = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));

DataOutputStream ps = new DataOutputStream(s.getOutputStream());

//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工,具体可以参见Think In Java 4th里有现成的代码。

ps.writeUTF(fi.getName());

ps.flush();

ps.writeLong((long) fi.length());

ps.flush();

int bufferSize = 8192;

byte[] buf = new byte[bufferSize];

while (true) {

int read = 0;

if (fis != null) {

read = fis.read(buf);

}

if (read == -1) {

break;

}

ps.write(buf, 0, read);

}

ps.flush();

// 注意关闭socket链接哦,不然客户端会等待server的数据过来,

// 直到socket超时,导致数据不完整。

fis.close();

s.close();

System.out.println("文件传输完成");

}

} catch (Exception e) {

e.printStackTrace();

}

}

public static void main(String arg[]) {

new ServerTest().start();

}

}

2.socket的Util辅助类

package sterning;

import java.net.*;

import java.io.*;

public class ClientSocket {

private String ip;

private int port;

private Socket socket = null;

DataOutputStream out = null;

DataInputStream getMessageStream = null;

public ClientSocket(String ip, int port) {

this.ip = ip;

this.port = port;

}

/** *//**

* 创建socket连接

*

* @throws Exception

* exception

*/

public void CreateConnection() throws Exception {

try {

socket = new Socket(ip, port);

} catch (Exception e) {

e.printStackTrace();

if (socket != null)

socket.close();

throw e;

} finally {

}

}

public void sendMessage(String sendMessage) throws Exception {

try {

out = new DataOutputStream(socket.getOutputStream());

if (sendMessage.equals("Windows")) {

out.writeByte(0x1);

out.flush();

return;

}

if (sendMessage.equals("Unix")) {

out.writeByte(0x2);

out.flush();

return;

}

if (sendMessage.equals("Linux")) {

out.writeByte(0x3);

out.flush();

} else {

out.writeUTF(sendMessage);

out.flush();

}

} catch (Exception e) {

e.printStackTrace();

if (out != null)

out.close();

throw e;

} finally {

}

}

public DataInputStream getMessageStream() throws Exception {

try {

getMessageStream = new DataInputStream(new BufferedInputStream(socket.getInputStream()));

return getMessageStream;

} catch (Exception e) {

e.printStackTrace();

if (getMessageStream != null)

getMessageStream.close();

throw e;

} finally {

}

}

public void shutDownConnection() {

try {

if (out != null)

out.close();

if (getMessageStream != null)

getMessageStream.close();

if (socket != null)

socket.close();

} catch (Exception e) {

}

}

}

3.客户端

package sterning;

import java.io.BufferedOutputStream;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.FileOutputStream;

public class ClientTest {

private ClientSocket cs = null;

private String ip = "localhost";// 设置成服务器IP

private int port = 8821;

private String sendMessage = "Windwos";

public ClientTest() {

try {

if (createConnection()) {

sendMessage();

getMessage();

}

} catch (Exception ex) {

ex.printStackTrace();

}

}

private boolean createConnection() {

cs = new ClientSocket(ip, port);

try {

cs.CreateConnection();

System.out.print("连接服务器成功!" + "\n");

return true;

} catch (Exception e) {

System.out.print("连接服务器失败!" + "\n");

return false;

}

}

private void sendMessage() {

if (cs == null)

return;

try {

cs.sendMessage(sendMessage);

} catch (Exception e) {

System.out.print("发送消息失败!" + "\n");

}

}

private void getMessage() {

if (cs == null)

return;

DataInputStream inputStream = null;

try {

inputStream = cs.getMessageStream();

} catch (Exception e) {

System.out.print("接收消息缓存错误\n");

return;

}

try {

//本地保存路径,文件名会自动从服务器端继承而来。

String savePath = "E:\\";

int bufferSize = 8192;

byte[] buf = new byte[bufferSize];

int passedlen = 0;

long len=0;

savePath += inputStream.readUTF();

DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(newBufferedOutputStream(new FileOutputStream(savePath))));

len = inputStream.readLong();

System.out.println("文件的长度为:" + len + "\n");

System.out.println("开始接收文件!" + "\n");

while (true) {

int read = 0;

if (inputStream != null) {

read = inputStream.read(buf);

}

passedlen += read;

if (read == -1) {

break;

}

//下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比

System.out.println("文件接收了" + (passedlen * 100/ len) + "%\n");

fileOut.write(buf, 0, read);

}

System.out.println("接收完成,文件存为" + savePath + "\n");

fileOut.close();

} catch (Exception e) {

System.out.println("接收消息错误" + "\n");

return;

}

}

public static void main(String arg[]) {

new ClientTest();

}

}

关于socket编程实例和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~