Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - jordy96

Páginas: [1]
1
Hola, nesecito una ayudita por favor. Soy nuevo en esto de la programacion en python, tengo el código pero me salen errores y no compila.


Código: [Seleccionar]
#-*- encoding: utf-8 -*-

import matplotlib.pyplot as plt
import numpy as np
from Tkinter import *
import ttk
import tkMessageBox

# ------PARTE VISUAL------ #

#Creación de la clase ventana, permite manejar toda la parte de IU de la aplicación
class ventana:
def __init__(self):
#Se crea un objeto de tipo TK
self.v0=Tk()
#Establece tamaño y posición de la ventana
self.v0.geometry("492x500+400+100")
#Agrega titulo a la ventana
self.v0.title("Proyecto Investigacion de Operaciones")
#Cambia el color del fondo
self.v0.config(bg="#8BB2E4")
#Establece la dimensión de la ventana fija
self.v0.resizable(False,False)
#Crear un label que contiene el titulo
self.lTitulo=Label(self.v0,text="Método Gráfico",fg="red",font=("Helvetica", 16),pady="15",bg="#8BB2E4")
#Establece la posición del titulo dentro de la venta
self.lTitulo.grid(row=0,column=0)


#Crea un nuevo frame dentro de la ventana
self.frame0=Frame(self.v0)
#Establece propiedades del frame0
self.frame0.config(padx="10",pady="10",bg="#8BB2E4",borderwidth=1,relief="ridge")
#Ajusta su posición dentro de la ventana
self.frame0.grid(row=1,padx=10)
#Crea un nuevo frame dentro de la ventana
self.frame1=LabelFrame(self.frame0,text="Función Objetivo: Ejemplo 2x + 8y",padx="10",pady="10",labelanchor="n",bg="#8BB2E4")
#Ajusta su posición dentro de la ventana
self.frame1.grid(row=0,column=0)
#Crea un nuevo frame dentro de la ventana
self.frame2=Frame(self.frame0,bg="#8BB2E4")
#Ajusta su posición dentro de la ventana
self.frame2.grid(row=0,column=1,rowspan = 2,padx=10, pady=20)


#widgets del frame 0
self.labelT=Label(self.frame1,text="Tipo:",font=("Helvetica", 12),bg="#8BB2E4")
self.labelT.grid(row=0,column=0,padx=10)
self.ValorMax_Min = StringVar()
self.CBMax_Min = ttk.Combobox(self.frame1,textvariable=self.ValorMax_Min,width="10",font=("Helvetica", 10))
self.CBMax_Min['values'] = ('Maximizar', 'Minimizar')
self.CBMax_Min.current(0)
self.CBMax_Min.grid(row=0,column=1,padx=10)
self.valorFO=StringVar()
self.valorLFO=StringVar()
self.labelZ=Label(self.frame1,text="Z= ",font=("Helvetica", 12),width="4",bg="#8BB2E4")
self.labelZ.grid(row=0,column=2)
self.entradaFO=Entry(self.frame1,textvar=self.valorFO,width="10",font=("Helvetica", 10))
self.entradaFO.grid(row=0,column=3,padx=10)
self.BtnAgregarFO=Button(self.frame2,text="Agregar FO",command=lambda:self.AgregarFO(self.valorFO,self.ValorMax_Min,self.valorLFO))
self.BtnAgregarFO.grid(row=0,column=0)
self.BtnNuevo=Button(self.frame2,text="Nuevo",command=lambda:self.nuevo(self.valorLFO))
self.BtnNuevo.grid(row=1,column=0,padx=20, pady=20)
self.labelFO=Label(self.frame0,textvar=self.valorLFO,font=("Helvetica", 16),relief="ridge",width="22",bg="#FFF")
self.labelFO.grid(row=1,column=0)


#Crear mas frames
self.frame3=Frame(self.v0)
self.frame3.config(padx="10",pady="10",bg="#8BB2E4",borderwidth=1,relief="ridge")
self.frame3.grid(row=2,padx=10,pady=10)
self.frame4=LabelFrame(self.frame3,text="Restricciones: Ejemplo 2x + 8y <= Ò >= 10",padx="10",pady="10",labelanchor="n",bg="#8BB2E4")
self.frame4.grid(row=0,column=0, pady=10)
self.frame5=Frame(self.frame3,bg="#8BB2E4")
self.frame5.grid(row=0,column=1,padx=10, pady=10,rowspan=2)


#Widgets Restricciones
self.lista = Listbox(self.frame3,width=28,height=5,font=("Helvetica", 14))
self.lista.grid(row=1,column=0)
self.valorRes=StringVar()
self.entradaRes=Entry(self.frame4,textvar=self.valorRes,font=("Helvetica", 10))
self.entradaRes.grid(row=0,column=0,padx=10)
self.BtnAgregarRes=Button(self.frame4,text="Agregar",command=lambda:self.insertarListbox(self.lista,self.valorRes))
self.BtnAgregarRes.grid(row=0,column=1,pady=10)
self.BtnMostrarGrafica=Button(self.frame5,text="Mostrar Grafica",command=lambda:graficar())
self.BtnMostrarGrafica.grid(row=0,column=1,padx=10, pady=20)
self.BtnReiniciar=Button(self.frame5,text="Mostrar \nResultados",command=lambda:resultados())
self.BtnReiniciar.grid(row=1,column=1,padx=10, pady=20)
self.BtnReiniciar=Button(self.frame5,text="Reiniciar",command=lambda:self.limpiar_listbox(self.lista))
self.BtnReiniciar.grid(row=2,column=1,padx=10, pady=20)

#Función que se ejecuta cuando se toca el boton "Agregar FO"
def AgregarFO(self,fo,max_min,label):
if fo.get()=="":
tkMessageBox.showinfo("ERROR", "No se ha ingresado función objetivo")
else:
foCopia=fo.get()
try:
foCopia=foCopia.replace("x","/")
foCopia=foCopia.replace("y","/")
foCopia=foCopia.split("/")
global Objfo
Objfo.llenarAtributos(float(foCopia[0]),float(foCopia[1]),max_min.get())
label.set(max_min.get()+" Z=  "+fo.get())
except:
tkMessageBox.showinfo("ERROR", "Error al ingresar los datos")

#Función que se ejecuta cuando se toca el boton "Nuevo"
def nuevo(self,label):
global Objfo
label.set("")
Objfo=fObjetivo()
listaEcuaciones=[]
listaRestricciones=[]
listaPuntos=[]
print listaEcuaciones

#Función que se ejecuta cuando se toca el boton "Agregar Restricciones"
def insertarListbox(self,listbox,rest):
if rest.get()=="":
tkMessageBox.showinfo("ERROR", "No ha ingresado restricciones")
else:
try:
ecuacion=rest.get()
if ecuacion.find("<=")>1:
ecuacion=ecuacion.replace("<=","")
tipo=1
elif ecuacion.find(">=")>1:
ecuacion=ecuacion.replace(">=","")
tipo=0
else:
ecuacion=ecuacion.replace("=","")
tipo=2
ecuacion=ecuacion.replace("x","/")
ecuacion=ecuacion.replace("y","/")
ecuacion=ecuacion.replace("<=","/")
ecuacion=ecuacion.replace(">=","/")
ecuacion=ecuacion.replace("=","/")
ecuacion=ecuacion.split("/")
a=float(ecuacion[0])
b=float(ecuacion[1])
c=float(ecuacion[2])

listbox.insert(END, rest.get())
listaEcuaciones.append((a,b,c,tipo))
rest.set("")
except:
tkMessageBox.showinfo("ERROR", "Error al ingresar los datos")

#Función que se ejecuta cuando se toca el boton "Reiniciar"
def limpiar_listbox(self,listbox):
    while listbox.size() > 0:
        listbox.delete(0)
global listaRestricciones
listaRestricciones=[]
global listaEcuaciones
listaEcuaciones=[]
print listaEcuaciones
global listaPuntos
listaPuntos=[]
Objfo.pFactible=[]

#Función que se ejecuta cuando empieza la aplicación
def run(self):
self.v0.mainloop()

# ------PARTE LÓGICA------ #

#Permite Almacenar la restricciones que recien se agregan
listaEcuaciones=[]
#Almacena los puntos
listaPuntos=[(0,0)]
#Esta lista contiene letras que sirven para marcar los puntos
letras=["0","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"]
#Almacena la lista de objetos de tipo restriccion
listaRestricciones=[]
#Almacena los valores de z obtenido de evaluar cada punto
listaResultados=[]


def hallarVertices():
i=0
j=i+1
for restriccion in listaRestricciones:
listaPuntos.append((restriccion.valorX,0.))
listaPuntos.append((0.,restriccion.valorY))
while i<len(listaRestricciones)-1:
while j<len(listaRestricciones):
try:
M1 = np.array([[listaRestricciones[i].valora,listaRestricciones[i].valorb],
[listaRestricciones[j].valora,listaRestricciones[j].valorb]])
M2 = np.array([listaRestricciones[i].valorc,listaRestricciones[j].valorc])
punto = np.linalg.solve(M1, M2)
listaPuntos.append((punto[0],punto[1]))
except:
pass
j+=1
i+=1
j=i+1

def dibujarPuntos(plt):
i=0
for vertice in listaPuntos:
plt.annotate(letras [i],xy=(vertice[0],vertice[1]), fontsize=12)
plt.scatter(vertice[0],vertice[1],color="b")
i+=1

def puntosNegativos():
i=0
while i<len(listaPuntos):
if listaPuntos[i][0]<0 or listaPuntos[i][1]<0:
listaPuntos.remove(listaPuntos[i])
i+=1

def puntosRepetidos(Puntos):
lista_nueva = []
for i in Puntos:
if i not in lista_nueva:
lista_nueva.append(i)
Puntos[0:len(listaPuntos)]=lista_nueva

def hallarResultados():
i=0
for p in listaPuntos:
listaResultados.append((letras[i],p[0],p[1],Objfo.a*p[0]+Objfo.b*p[1]))
i+=1


def graficar():
mayorX=0
mayorY=0
colores=["b","g","c","m","y"]

for ecuacion in listaEcuaciones:
restic=Restriccion(ecuacion[0],ecuacion[1],ecuacion[2],ecuacion[3])
listaRestricciones.append(restic)

if len(listaRestricciones)>0:
for res in listaRestricciones:
res.hallarPuntos()
abs(res.valorX)
if abs(res.valorX)>mayorX:
mayorX=abs(res.valorX)
if res.valorY>mayorY:
mayorY=res.valorY
hallarVertices()
puntosNegativos()
puntosRepetidos(listaPuntos)
dibujarPuntos(plt)
hallarResultados()
for res in listaRestricciones:
if mayorX<=0:
mayorX=mayorY=10
res.valorX=mayorX
res.despejarY()
res.dibujar(plt)
seleccion=np.random.randint(len(colores))
if res.tipo==1:
plt.fill_between(res.listaX,res.listaY,color=colores[seleccion],alpha=0.3)
plt.grid(True)
plt.ylim(-1,mayorY+2)
plt.xlim(-1,mayorX+2)
plt.xlabel('valores X',fontsize = 12)
plt.ylabel('valores Y',fontsize = 12)
global Objfo
Objfo.puntosFactible(listaResultados,listaRestricciones,plt)
Objfo.solucion(listaResultados,mayorX)
plt.legend(loc='upper center', shadow=True)
plt.show()
else:
tkMessageBox.showinfo("ERROR", "No ha ingresado restricciones")
class fObjetivo:
def __init__(self):
self.a=0
self.b=0
self.tipo=""
self.z=0
self.pFactible=[]
def llenarAtributos(self,a,b,tipo):
self.a=a
self.b=b
self.tipo=tipo
def puntosFactible(self,resultados,restricciones,plt):
i=0
j=0
cuenta=0
for p in resultados:
for restriccion in restricciones:
if restriccion.tipo==1:
if restriccion.valora*p[1]+restriccion.valorb*p[2]<=restriccion.valorc:
cuenta+=1
elif restriccion.tipo==0:
if restriccion.valora*p[1]+restriccion.valorb*p[2]>=restriccion.valorc:
cuenta+=1
else:
if restriccion.valora*p[1]+restriccion.valorb*p[2]==restriccion.valorc:
cuenta+=1
if cuenta==len(restricciones):
self.pFactible.append((p[1],p[2],p[3]))
plt.scatter(p[1],p[2],color="k",marker=(5,0),s=80)
cuenta=0


def solucion(self,resultados,mayorX):
p=[]
cuenta=0
menor=100
mayor=0
print len(self.pFactible)
if len(self.pFactible)<1:
plt.title("Solucion No Factible")
elif len(self.pFactible)==1:
if self.tipo=="Maximizar":
plt.title("Con Solucion No Acotada")
else:
p=(self.pFactible[0][0],self.pFactible[0][1])
print p
plt.title("Con Unica Solucion")
listaX=np.arange(0,float(mayorX)+1)
listaY=(mayor-self.a*listaX)/self.b
plt.plot(listaY,color="r",label="z = "+str(mayor))
  plt.annotate(r'Solucion: x='+str(p[0])+' y= '+str(p[1])+'',xy=(p[0],p[1]), xycoords='data',xytext=(p[0]+5,p[1]+5), textcoords='offset points', fontsize=12,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
  plt.scatter(p[0],p[1],color="m",s=80)
     
else:
if self.tipo=="Maximizar":
for f in self.pFactible:
if f[2]>=mayor:
mayor=f[2]
p=(f[0],f[1])
for f in self.pFactible:
if f[2]==mayor:
cuenta+=1
if cuenta>=2:
plt.title("Con Multiples Soluciones")
listaX=np.arange(0,float(mayorX)+1)
listaY=(mayor-self.a*listaX)/self.b
plt.plot(listaY,color="r",label="z = "+str(mayor))
else:
plt.title("Con Unica Solucion")
listaX=np.arange(0,float(mayorX)+1)
listaY=(mayor-self.a*listaX)/self.b
plt.plot(listaY,color="r",label="z = "+str(mayor))
plt.annotate(r'Solucion: x='+str(p[0])+' y= '+str(p[1])+'',xy=(p[0],p[1]), xycoords='data',xytext=(p[0]+5,p[1]+5), textcoords='offset points', fontsize=12,arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plt.scatter(p[0],p[1],color="m",s=80)
else:
print "Minimizar"
for f in self.pFactible:
if f[2]<=menor:
menor=f[2]
p=(f[0],f[1])
for f in self.pFactible:
if f[2]==menor:
cuenta+=1
if cuenta>=2:
listaX=np.arange(0,float(mayorX)+1)
listaY=(menor-self.a*listaX)/self.b
plt.plot(listaY,color="r",label="z = "+str(menor))
plt.title("Con Solucion Multiple")
else:
listaX=np.arange(0,float(mayorX)+1)
listaY=(menor-self.a*listaX)/self.b
plt.plot(listaY,color="r",label="z = "+str(menor))
plt.annotate(r'Solucion: x='+str(p[0])+' y= '+str(p[1])+'',xy=(p[0],p[1]), xycoords='data',
  xytext=(p[0]+5,p[1]+5), textcoords='offset points', fontsize=12,
      arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
      plt.scatter(p[0],p[1],color="m",s=80)
      plt.title("Con Unica Solucion")

class Restriccion:
def __init__(self,a,b,c,tipo):
self.valorX=0
self.valorY=0
self.listaX=[]
self.listaY=[]
self.valora=a
self.valorb=b
self.valorc=c
self.tipo=tipo

def hallarPuntos(self):

if self.valorb==0 :
self.valorX=self.valorc/self.valora
elif self.valora==0:
self.valorY=self.valorc/self.valorb
else:
self.valorX=(self.valorc)/self.valora
self.valorY=(self.valorc)/self.valorb

def despejarY(self):
self.listaX=np.arange(0,float(self.valorX)+1)
if self.valorb==0:
self.listaY=(0*self.listaX)
elif self.valora==0:
self.listaY=(self.valorc+0*self.listaX)/self.valorb
else:
self.listaY=(self.valorc-self.valora*self.listaX)/self.valorb

def dibujar(self,ventana):
ventana.plot(self.listaY,"k")



Objfo= fObjetivo()
principal= ventana()
principal.run()


2
Tema:  Sockets en Java

Objetivos:  Realizar el desarrollo de prototipos sockets en Java gráfico

Instrucciones:

1.   La tarea es individual y se plantea emplear un proyecto básico de Sockets-Java con el objetivo de mejorarlo, desarrollando determinadas clases.
2.   Desarrolle el proyecto en códigos java para su posterior envío en formato ZIP.

Sockets4_cliente
Sockets4_servidor   
El servidor solo contesta mensajes con números octal
(0,1,2,3,4,5,6,7)

eso es todo lo que dice mi rubrica y el código ya lo publique es todo eso y se tiene que modificar con las condiciones que me pide que solo conteste con numero octal --el cliente hace una consulta al servidor o ingresa un numero del 0 al 7 si se pasa de ese rango por decir un 8 el servidor debe de contestar con un error eso es lo que me dijo el docente..

3
Por otro lado, indicas que el servidor tiene que responder con números octales (0,1,2,3,4,5,6,7) pero, ¿responde aleatoriamente a cualquier petición, o tiene que responder determinado número según cuál sea el contenido de la petición? ¿Cuál es exactamente el enunciado o rúbrica del ejercicio?
y respondiendo a esto mi enunciado solo es esto--que el servidor solo contesta con numero octal nada mas dice

4
Sí, tengo el resto de código tanto del clientes su form y del servidor también. Solo pasé le código de servidorsocket:

Voy a pasar todo el código que tengo---

codigo de sockest-servidor  y su formu1

Código: [Seleccionar]
/*COMUNICACION UDP (protocolo sin conexión/IP) CLIENTE-SERVIDOR CON HILOS
La conexión UDP no es orientada a conexión, es decir, el servidor en principio
no sabe de donde viene el mensaje, aunque lo puede saber mirando el datagrama que le llega.
En otras palabras y comparando con la conexión TCP, UDP no necesita saber quien se conecta a él.
En UDP se envían datagramas a modo de mensajes.*/


package sockets4_servidor;

import java.io.*;
import java.net.*;

public class Sockets4_servidor {

static formu1 formu = new formu1();
static Sockets4_servidor meto = new Sockets4_servidor();
int PUERTO = 5000; //Puerto servidor   
String mensa1;
byte[] buffer = new byte[1024]; //buffer donde se almacenara los mensajes
DatagramSocket socketUDP;
DatagramPacket respuesta;
InetAddress direccion;
int puertoCliente;

public static void main(String[] args) {
formu.setVisible(true);meto.conexion();meto.ejecutarconexion();}


public void ejecutarconexion() {
Thread hilo = new Thread(new Runnable() {
@Override
@SuppressWarnings("empty-statement")
 public void run() {
 while (true) {   
  try {mensaje();}
  finally {;} } } } );
 hilo.start();}

public void conexion() {
try {   
formu1.jTextArea1.append("Esperando conexión entrante en el puerto: " + PUERTO+ "\n");
direccion = InetAddress.getLocalHost();
formu1.jTextArea1.append("Servidor IP: " + direccion + "\n");}       
catch (IOException e) {System.err.println("Error "+e);} } 

public void mensaje() {
try {
 //Creacion del socket
 socketUDP = new DatagramSocket(PUERTO);
 //Preparo la respuesta
 DatagramPacket peticion = new DatagramPacket(buffer, buffer.length);
//Recibo el datagrama
 socketUDP.receive(peticion);
 //Convierto lo recibido y mostrar el mensaje
 mensa1 =new String(peticion.getData());
 formu1.jTextArea1.append(mensa1+"\n");
 //Obtengo el puerto y la direccion de origen
 //Sino se quiere responder, no es necesario
 puertoCliente = peticion.getPort();
 direccion = peticion.getAddress();
 mensa1="";
 buffer = mensa1.getBytes();
 //creo el datagrama
 respuesta = new DatagramPacket(buffer, buffer.length, direccion, puertoCliente);
 //Envio la información
 socketUDP.send(respuesta); }       
catch (IOException e) {System.err.println("Error "+e);} } 
 
}



// código de formu-servidor

Código: [Seleccionar]
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sockets4_servidor;

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Usuario
 */
public class formu1 extends javax.swing.JFrame {

    Sockets4_servidor socke4 = new Sockets4_servidor();
    /**
     * Creates new form formu1
     */
    public formu1() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SERVIDOR");

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(47, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 594, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(37, 37, 37))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(28, 28, 28)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(38, Short.MAX_VALUE))
        );

        pack();
        setLocationRelativeTo(null);
    }// </editor-fold>                       

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new formu1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JScrollPane jScrollPane1;
    public static javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}



//codigo sockest-cliente

Código: [Seleccionar]
/*COMUNICACION UDP (protocolo sin conexión/IP) CLIENTE-SERVIDOR CON HILOS

La conexión UDP no es orientada a conexión, es decir, el servidor en principio
no sabe de donde viene el mensaje, aunque lo puede saber mirando el datagrama que le llega.
En otras palabras y comparando con la conexión TCP, UDP no necesita saber quien se conecta a él.
En UDP se envían datagramas a modo de mensajes.*/

package sockets4_cliente;

import java.io.*;
import java.net.*;


public class Sockets4_cliente {

static formu1 formu = new formu1();
static Sockets4_cliente meto = new Sockets4_cliente();
String HOST = "localhost"; //Host servidor (IP o localhost)
int PUERTO = 5000; //Puerto servidor   
String mensa1;
byte[] buffer = new byte[1024];   //buffer donde se almacenara los mensajes
InetAddress direccionServidor;


public static void main(String[] args) throws UnknownHostException {
formu.setVisible(true);meto.conexion();meto.ejecutarconexion();}

public void ejecutarconexion() {
Thread hilo = new Thread(new Runnable() {
@Override
@SuppressWarnings("empty-statement")
 public void run() {
 while (true) {       
  try {mensaje();}
  finally {;} } } } );
   hilo.start();}
     

public void conexion() throws UnknownHostException {
 String nombrepc= InetAddress.getLocalHost().getHostName();
 formu1.jTextArea1.append("Nombre PC= "+nombrepc +" conectado a "+HOST+"\n");
 //Obtengo la localizacion de localhost
 direccionServidor = InetAddress.getByName(HOST);
}
               
public void mensaje() {
try {
    //Creo el socket de UDP
    DatagramSocket socketUDP = new DatagramSocket();
    //Convierto el mensaje a bytes
    mensa1="Hola Cliente";
    buffer = mensa1.getBytes();
    //Creo un datagrama
    DatagramPacket pregunta = new DatagramPacket(buffer, buffer.length, direccionServidor, PUERTO);
    //Lo envio con send
    socketUDP.send(pregunta);
    //Preparo la respuesta
    DatagramPacket peticion = new DatagramPacket(buffer, buffer.length);
    //Recibo la respuesta
     socketUDP.receive(peticion);
     //Cojo los datos y lo muestro
     mensa1 = new String(peticion.getData());
     formu1.jTextArea1.append(mensa1+"\n"); }
 catch (IOException e) {System.err.println("Error "+e);} } 

}


//codigo de formu1-cliente

Código: [Seleccionar]
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package sockets4_cliente;

/**
 *
 * @author Usuario
 */
public class formu1 extends javax.swing.JFrame {

    Sockets4_cliente socke4 = new Sockets4_cliente();
    /**
     * Creates new form formu1
     */
    public formu1() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("CLIENTE");

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(58, 58, 58)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 499, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(62, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(50, Short.MAX_VALUE))
        );

        pack();
        setLocationRelativeTo(null);
    }// </editor-fold>                       

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(formu1.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new formu1().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JScrollPane jScrollPane1;
    public static javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}

Eso es todo lo que tengo

5
¡Hola comunidad programadora! Soy nuevo en este sitio, mi nombre es Jordy, mucho gusto.

Estoy aquí para aprender más acerca del lenguaje java. Tengo un problema con un ejercicio y ya le he dado mil vueltas y no logro realizarlo. Este ejercicio me pide que tengo que conectarme a un servidor en donde el cliente hace una petición y solo el servidor responderá con números octales (0,1,2,3,4,5,6,7), pero la conexión debe de ser solo comunicación UDP ¿Cómo puedo realizar eso en el siguiente código? Necesito ayuda  :'(

Código: [Seleccionar]
//código del servidor 

/*COMUNICACION UDP (protocolo sin conexión/IP) CLIENTE-SERVIDOR CON HILOS
La conexión UDP no es orientada a conexión, es decir, el servidor en principio
no sabe de donde viene el mensaje, aunque lo puede saber mirando el datagrama que le llega.
En otras palabras y comparando con la conexión TCP, UDP no necesita saber quien se conecta a él.
En UDP se envían datagramas a modo de mensajes.*/


package sockets4_servidor;

import java.io.*;
import java.net.*;

public class Sockets4_servidor {

static formu1 formu = new formu1();
static Sockets4_servidor meto = new Sockets4_servidor();
int PUERTO = 5000; //Puerto servidor   
String mensa1;
byte[] buffer = new byte[1024]; //buffer donde se almacenara los mensajes
DatagramSocket socketUDP;
DatagramPacket respuesta;
InetAddress direccion;
int puertoCliente;

public static void main(String[] args) {
formu.setVisible(true);meto.conexion();meto.ejecutarconexion();}


public void ejecutarconexion() {
Thread hilo = new Thread(new Runnable() {
@Override
@SuppressWarnings("empty-statement")
 public void run() {
 while (true) {   
  try {mensaje();}
  finally {;} } } } );
 hilo.start();}

public void conexion() {
try {   
formu1.jTextArea1.append("Esperando conexión entrante en el puerto: " + PUERTO+ "\n");
direccion = InetAddress.getLocalHost();
formu1.jTextArea1.append("Servidor IP: " + direccion + "\n");}       
catch (IOException e) {System.err.println("Error "+e);} } 

public void mensaje() {
try {
 //Creacion del socket
 socketUDP = new DatagramSocket(PUERTO);
 //Preparo la respuesta
 DatagramPacket peticion = new DatagramPacket(buffer, buffer.length);
//Recibo el datagrama
 socketUDP.receive(peticion);
 //Convierto lo recibido y mostrar el mensaje
 mensa1 =new String(peticion.getData());
 formu1.jTextArea1.append(mensa1+"\n");
 //Obtengo el puerto y la direccion de origen
 //Sino se quiere responder, no es necesario
 puertoCliente = peticion.getPort();
 direccion = peticion.getAddress();
 mensa1="SERVIDOR: Hola Cliente";
 buffer = mensa1.getBytes();
 //creo el datagrama
 respuesta = new DatagramPacket(buffer, buffer.length, direccion, puertoCliente);
 //Envio la información
 socketUDP.send(respuesta); }       
catch (IOException e) {System.err.println("Error "+e);} } 
 
}

Páginas: [1]

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".